yonge 5 年之前
父节点
当前提交
d7fcbb5581
共有 19 个文件被更改,包括 312 次插入70 次删除
  1. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  3. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleRewardsRules.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  5. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  6. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  7. 16 11
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  8. 54 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleRewardsRulesServiceImpl.java
  9. 52 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  10. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  11. 32 26
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  12. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleRewardsMapper.xml
  13. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  15. 11 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  16. 16 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  17. 24 0
      mec-task/src/main/java/com/ym/mec/task/jobs/UpdateCourseScheduleToOverStatusTask.java
  18. 12 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleRewardsRulesController.java
  19. 26 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -4,11 +4,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
@@ -249,4 +249,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> queryFinishedWithNoUpdateStatus();
     
     int batchUpdate(List<CourseSchedule> courseScheduleList);
+    
+    /**
+     * 查询提前指定分钟数还未签到的用户
+     * @param minutes 分钟数
+     * @return
+     */
+    List<CourseSchedule> queryNoSignInListByBeforeMinutes(Integer minutes);
 }

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

@@ -41,4 +41,10 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
     TeacherAttendance findByTeacherAttendanceInfo(@Param("teacherId") Long teacherId,
                                                   @Param("courseScheduleId") Long courseScheduleId);
 	
+    /**
+     * 查询超过指定分钟数还未签退的用户
+     * @param minutes 分钟数
+     * @return
+     */
+    List<TeacherAttendance> queryNoSignOutListByOverMinutes(Integer minutes);
 }

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleRewardsRules.java

@@ -13,7 +13,7 @@ import com.ym.mec.common.enums.BaseEnum;
 public class CourseScheduleRewardsRules {
 
 	public enum RewardMode implements BaseEnum<String, RewardMode> {
-		PER, TOTAL;
+		STAIR, PER, TOTAL;
 
 		@Override
 		public String getCode() {
@@ -45,6 +45,8 @@ public class CourseScheduleRewardsRules {
 
 	/**  */
 	private java.util.Date updateTime;
+	
+	private String organNameList;
 
 	public void setId(Integer id) {
 		this.id = id;
@@ -110,6 +112,14 @@ public class CourseScheduleRewardsRules {
 		return this.updateTime;
 	}
 
+	public String getOrganNameList() {
+		return organNameList;
+	}
+
+	public void setOrganNameList(String organNameList) {
+		this.organNameList = organNameList;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -44,7 +44,7 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签退状态:0异常,1正常")
 	private YesOrNoEnum signOutStatus;
 
-	@ApiModelProperty(value = "签退使劲按")
+	@ApiModelProperty(value = "签退时间")
 	private Date signOutTime;
 	
 	/** 备注 */

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

@@ -168,4 +168,10 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @return
      */
     boolean updateCourseScheduleToOverStatus();
+
+	/**
+	 * 推送未签到消息提醒
+	 * @return
+	 */
+	boolean pushNoSignInMessage();
 }

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

@@ -71,6 +71,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 	public static final String HIGH_GRADIENT_SETTLEMENT_RULE = "high_gradient_settlement_rule";
 
 	/**
+	 * 如果没有签退,{}分钟后自动发送推送信息
+	 */
+	public static final String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
+
+	/**
 	 * @params paramName
 	 * @return com.ym.mec.biz.dal.entity.SysConfig
 	 * @describe 根据配置名称获取配置信息

+ 16 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -10,17 +10,22 @@ import java.util.Map;
 
 public interface TeacherAttendanceService extends BaseService<Long, TeacherAttendance> {
 
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/9/10
-     * 添加教师签到记录
-     */
-    Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto);
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/10
+	 * 添加教师签到记录
+	 */
+	Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto);
 
-    /**
-     * 获取教师个人的签到记录
-     * @return
-     */
-    PageInfo getTeacherPersonalAttendances(TeacherAttendanceQueryInfo queryInfo);
+	/**
+	 * 获取教师个人的签到记录
+	 * @return
+	 */
+	PageInfo getTeacherPersonalAttendances(TeacherAttendanceQueryInfo queryInfo);
 
+	/**
+	 * 推送未签退消息提醒
+	 * @return
+	 */
+	boolean pushNoSignOutMessage();
 }

+ 54 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleRewardsRulesServiceImpl.java

@@ -1,19 +1,27 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.biz.dal.dao.CourseScheduleRewardsRulesDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules.RewardMode;
 import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules;
+import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules.RewardMode;
 import com.ym.mec.biz.service.CourseScheduleRewardsRulesService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.json.JsonUtil;
 
 @Service
@@ -21,6 +29,9 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 
 	@Autowired
 	private CourseScheduleRewardsRulesDao courseScheduleRewardsDao;
+	
+	@Autowired
+	private OrganizationDao organizationDao;
 
 	@Override
 	public BaseDAO<Integer, CourseScheduleRewardsRules> getDAO() {
@@ -28,6 +39,29 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 	}
 
 	@Override
+	public PageInfo<CourseScheduleRewardsRules> queryPage(QueryInfo queryInfo) {
+		PageInfo<CourseScheduleRewardsRules> pageInfo = new PageInfo<CourseScheduleRewardsRules>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		
+		List<CourseScheduleRewardsRules> dataList = null;
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = this.getDAO().queryPage(params);
+			for(CourseScheduleRewardsRules rules : dataList){
+				rules.setOrganNameList(organizationDao.findByOrganIds(rules.getOrganIdList()).stream().collect(Collectors.joining("、")));
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<CourseScheduleRewardsRules>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public BigDecimal queryRewardsAmount(Integer organId, CourseScheduleType courseScheduleType, int coursesNum) {
 
 		List<CourseScheduleRewardsRules> CourseScheduleRewardsRulesList = courseScheduleRewardsDao.query(organId, courseScheduleType);
@@ -41,20 +75,32 @@ public class CourseScheduleRewardsRulesServiceImpl extends BaseServiceImpl<Integ
 		String json = courseScheduleRewardsRules.getRewardsRulesJson();
 
 		List<RewardsRules> rewardsRulesList = JsonUtil.parseArray(json, RewardsRules.class);
-		
+
 		Collections.sort(rewardsRulesList);
-		
+
 		RewardsRules rewardsRules = new RewardsRules();
-		
-		for(RewardsRules rule : rewardsRulesList){
-			if(rule.min >= coursesNum && rule.max < coursesNum){
+
+		for (RewardsRules rule : rewardsRulesList) {
+			if (rule.min >= coursesNum && rule.max <= coursesNum) {
 				rewardsRules = rule;
 				break;
 			}
 		}
-		
-		if(courseScheduleRewardsRules.getRewardMode() == RewardMode.TOTAL){
+
+		if (courseScheduleRewardsRules.getRewardMode() == RewardMode.TOTAL) {
 			return rewardsRules.getAmount();
+		} else if (courseScheduleRewardsRules.getRewardMode() == RewardMode.STAIR) {
+			BigDecimal amount = new BigDecimal(0);
+			for (RewardsRules rule : rewardsRulesList) {
+				if (coursesNum <= rule.max) {
+					amount = amount.add(new BigDecimal(coursesNum * rule.amount.doubleValue()));
+				} else {
+					amount = amount.add(new BigDecimal(rule.max * rule.amount.doubleValue()));
+					coursesNum = coursesNum - rule.max;
+				}
+			}
+
+			return amount;
 		}
 
 		return rewardsRules.getAmount().multiply(new BigDecimal(coursesNum));

+ 52 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -1,5 +1,27 @@
 package com.ym.mec.biz.service.impl;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
@@ -15,31 +37,22 @@ import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.ParamEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule>  implements CourseScheduleService {
 	
@@ -53,6 +66,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private SysConfigDao sysConfigDao;
 	@Autowired
 	private StudentAttendanceDao studentAttendanceDao;
+	@Autowired
+	private SysConfigService sysConfigService;
+	
+	@Autowired
+	private SysMessageService sysMessageService;
 
 	@Override
 	public BaseDAO<Long, CourseSchedule> getDAO() {
@@ -514,18 +532,34 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	public boolean updateCourseScheduleToOverStatus() {
 		List<CourseSchedule> list = courseScheduleDao.queryFinishedWithNoUpdateStatus();
-		
+
 		List<CourseSchedule> updateList = new ArrayList<CourseSchedule>();
 		Date date = new Date();
-		for(CourseSchedule courseSchedule : list){
+		for (CourseSchedule courseSchedule : list) {
 			courseSchedule.setStatus(CourseStatusEnum.OVER);
 			courseSchedule.setUpdateTime(date);
 			updateList.add(courseSchedule);
 		}
-		
-		if(updateList.size()>0){
-			
+
+		if (updateList.size() > 0) {
+			courseScheduleDao.batchUpdate(updateList);
 		}
 		return true;
 	}
+
+	@Override
+	public boolean pushNoSignInMessage() {
+		Integer minutes = 30;
+		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE);
+		if (sysConfig != null && StringUtils.isNotBlank(sysConfig.getParanValue())) {
+			minutes = Integer.parseInt(sysConfig.getParanValue());
+		}
+
+		List<CourseSchedule> list = courseScheduleDao.queryNoSignInListByBeforeMinutes(minutes);
+
+		String teacherList = list.stream().map(cs -> cs.getActualTeacherId().toString()).collect(Collectors.joining(","));
+
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageSendMode.PUSH, "", "", teacherList, null, 0, "");
+		return true;
+	}
 }

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -7,25 +7,31 @@ import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.dto.TeacherPersonalAttendanceDto;
 import com.ym.mec.biz.dal.dto.TeacherSignOutDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.ParamEnum;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.TeacherAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherAttendance>  implements TeacherAttendanceService {
@@ -46,6 +52,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	private ClassGroupDao classGroupDao;
 	@Autowired
 	private CourseScheduleService courseScheduleService;
+	
+	@Autowired
+	private SysConfigService sysConfigService;
+	
+	@Autowired
+	private SysMessageService sysMessageService;
 
 	@Override
 	public BaseDAO<Long, TeacherAttendance> getDAO() {
@@ -180,5 +192,21 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		return pageInfo;
 	}
 
+	@Override
+	public boolean pushNoSignOutMessage() {
+		
+		Integer minutes = 30;
+		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE);
+		if(sysConfig != null && StringUtils.isNotBlank(sysConfig.getParanValue())){
+			minutes = Integer.parseInt(sysConfig.getParanValue());
+		}
+		
+		List<TeacherAttendance> list = teacherAttendanceDao.queryNoSignOutListByOverMinutes(minutes);
+		
+		String teacherList = list.stream().map(ta -> ta.getTeacherId().toString()).collect(Collectors.joining(","));
+		
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageSendMode.PUSH, "", "", teacherList, null, 0, "");
+		return true;
+	}
 
 }

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

@@ -691,46 +691,52 @@
     	select * from course_schedule where CONCAT(class_date_,' ',end_class_time_) &lt;= now() and status_ != 'OVER'
     </select>
     
-    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.CourseSchedule">
+    <update id="batchUpdate" parameterType="java.util.List">
+    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
         UPDATE course_schedule
         <set>
-            <if test="classDate != null">
-                class_date_ = #{classDate},
+            <if test="item.classDate != null">
+                class_date_ = #{item.classDate},
             </if>
-            <if test="endClassTime != null">
-                end_class_time_ = #{endClassTime},
+            <if test="item.endClassTime != null">
+                end_class_time_ = #{item.endClassTime},
             </if>
-            <if test="status != null">
-                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            <if test="item.status != null">
+                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="type != null">
-                type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            <if test="item.type != null">
+                type_ = #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="actualTeacherId != null">
-                actual_teacher_id_ = #{actualTeacherId},
+            <if test="item.actualTeacherId != null">
+                actual_teacher_id_ = #{item.actualTeacherId},
             </if>
-            <if test="subsidy != null">
-                subsidy_ = #{subsidy},
+            <if test="item.subsidy != null">
+                subsidy_ = #{item.subsidy},
             </if>
-            <if test="classGroupId != null">
-                class_group_id_ = #{classGroupId},
+            <if test="item.classGroupId != null">
+                class_group_id_ = #{item.classGroupId},
             </if>
-            <if test="startClassTime != null">
-                start_class_time_ = #{startClassTime},
+            <if test="item.startClassTime != null">
+                start_class_time_ = #{item.startClassTime},
             </if>
-            <if test="teacherId != null">
-                teacher_id_ = #{teacherId},
+            <if test="item.teacherId != null">
+                teacher_id_ = #{item.teacherId},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
+            <if test="item.updateTime != null">
+                update_time_ = #{item.updateTime},
             </if>
-            <if test="studentNum != null">
-                student_num_ = #{studentNum},
+            <if test="item.studentNum != null">
+                student_num_ = #{item.studentNum},
             </if>
-            <if test="leaveStudentNum != null">
-                leave_student_num_ = #{leaveStudentNum},
+            <if test="item.leaveStudentNum != null">
+                leave_student_num_ = #{item.leaveStudentNum},
             </if>
         </set>
-        WHERE id_ = #{id}
+        WHERE id_ = #{item.id}
+        </foreach>
     </update>
+
+    <select id="queryNoSignInListByBeforeMinutes" resultMap="CourseSchedule">
+        SELECT cs.* FROM course_schedule cs left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_ WHERE ta.sign_in_time_ is null and SUBTIME(start_class_time_, CONCAT(#{minutes},'00')) &lt; CURRENT_TIME()
+    </select>
 </mapper>

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

@@ -34,7 +34,7 @@
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO course_schedule_rewards_rules
 		(id_,name_,course_schedule_type_,reward_mode_,organ_id_list_,rewards_rules_json_,create_time_,update_time_)
-		VALUES(#{id},#{name},#{courseScheduleType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{rewardMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organIdList},#{rewardsRulesJson},#{createTime},#{updateTime})
+		VALUES(#{id},#{name},#{courseScheduleType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{rewardMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{organIdList},#{rewardsRulesJson},now(),now())
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -53,7 +53,7 @@
 				id_ = #{id},
 			</if>
 			<if test="updateTime != null">
-				update_time_ = #{updateTime},
+				update_time_ = now(),
 			</if>
 			<if test="organIdList != null">
 				organ_id_list_ = #{organIdList},

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

@@ -150,7 +150,7 @@
                 temporary_course_fee_ = #{item.temporaryCourseFee},
             </if>
         </set>
-        WHERE id_ = #{id}
+        WHERE id_ = #{item.id}
         </foreach>
     </update>
 </mapper>

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

@@ -156,9 +156,9 @@
     <select id="countClassTime" resultType="java.lang.Integer">
         select count(*) from teacher_attendance where class_group_id_=#{classGroupId} for update
     </select>
+    
     <select id="findByTeacherAttendanceInfo" resultMap="TeacherAttendance">
         SELECT * FROM teacher_attendance WHERE teacher_id_=#{teacherId} AND course_schedule_id_=#{courseScheduleId}
     </select>
 
-
 </mapper>

+ 11 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -14,4 +14,15 @@ public interface TaskRemoteService {
 
 	@GetMapping(value = "task/vipGroupAwardedMonthlyRewards")
 	public void vipGroupAwardedMonthlyRewards();
+	
+	@GetMapping(value = "task/updateCourseScheduleToOverStatus")
+    boolean updateCourseScheduleToOverStatus();
+	
+	@GetMapping("task/pushNoSignInMessage")
+	// 推送未签到消息提醒
+	public void pushNoSignInMessage();
+	
+	@GetMapping("task/pushNoSignOutMessage")
+	// 推送未签退消息提醒
+	public void pushNoSignOutMessage();
 }

+ 16 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -21,4 +21,20 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 		logger.info("vip课月度奖励的服务调用失败");
 	}
 
+	@Override
+	public boolean updateCourseScheduleToOverStatus() {
+		logger.info("更新课程状态至已结束服务调用失败");
+		return false;
+	}
+
+	@Override
+	public void pushNoSignInMessage() {
+		logger.info("推送未签到消息提醒的服务调用失败");
+	}
+
+	@Override
+	public void pushNoSignOutMessage() {
+		logger.info("推送未签退消息提醒的服务调用失败");
+	}
+
 }

+ 24 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/UpdateCourseScheduleToOverStatusTask.java

@@ -0,0 +1,24 @@
+package com.ym.mec.task.jobs;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+
+/**
+ * 更新课程状态至已结束
+ */
+@Service
+public class UpdateCourseScheduleToOverStatusTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.updateCourseScheduleToOverStatus();
+	}
+
+}

+ 12 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleRewardsRulesController.java

@@ -39,4 +39,16 @@ public class CourseScheduleRewardsRulesController extends BaseController {
 	public Object add(CourseScheduleRewardsRules courseScheduleRewardsRules) {
 		return succeed(courseScheduleRewardsRulesService.insert(courseScheduleRewardsRules));
 	}
+
+	@ApiOperation(value = "修改")
+	@PostMapping("/update")
+	public Object update(CourseScheduleRewardsRules courseScheduleRewardsRules) {
+		return succeed(courseScheduleRewardsRulesService.update(courseScheduleRewardsRules));
+	}
+
+	@ApiOperation(value = "删除")
+	@PostMapping("/delete")
+	public Object delete(Integer id) {
+		return succeed(courseScheduleRewardsRulesService.delete(id));
+	}
 }

+ 26 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -5,7 +5,9 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.MusicGroupStudentFeeService;
+import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 
@@ -19,6 +21,12 @@ public class TaskController extends BaseController {
 	@Autowired
 	private VipGroupService vipGroupService;
 
+	@Autowired
+	private CourseScheduleService courseScheduleService;
+	
+	@Autowired
+	private TeacherAttendanceService teacherAttendanceService;
+	
 	@GetMapping("/refreshPaymentFeeStatus")
 	// 刷新付费状态
 	public void refreshPaymentFeeStatus() {
@@ -30,4 +38,22 @@ public class TaskController extends BaseController {
 	public void vipGroupAwardedMonthlyRewards() {
 		vipGroupService.awardedMonthlyRewards();
 	}
+
+	@GetMapping("/updateCourseScheduleToOverStatus")
+	// 更新课程状态至已结束
+	public void updateCourseScheduleToOverStatus() {
+		courseScheduleService.updateCourseScheduleToOverStatus();
+	}
+
+	@GetMapping("/pushNoSignInMessage")
+	// 推送未签到消息提醒
+	public void pushNoSignInMessage() {
+		courseScheduleService.pushNoSignInMessage();
+	}
+
+	@GetMapping("/pushNoSignOutMessage")
+	// 推送未签退消息提醒
+	public void pushNoSignOutMessage() {
+		teacherAttendanceService.pushNoSignOutMessage();
+	}
 }