浏览代码

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 4 年之前
父节点
当前提交
d320ddb2e4
共有 20 个文件被更改,包括 211 次插入79 次删除
  1. 18 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceComplaintsDto.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  5. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/UpdateAttendanceEnum.java
  6. 25 2
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  8. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  9. 10 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  10. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  11. 18 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  12. 22 38
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  14. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  15. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  16. 17 9
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 1 1
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  18. 12 5
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  19. 3 2
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  20. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherAttendanceController.java

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

@@ -154,6 +154,24 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     List<CourseSchedule> getClassGroupNotStartCourse(@Param("classGroupId") Long classGroupId);
 
+    /**
+     * @describe 获取班级上的课程
+     * @author qnc99
+     * @date 2020/12/8 0008
+     * @param classGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     */
+    List<CourseSchedule> getClassGroupCourses(@Param("classGroupId") Long classGroupId);
+
+    /**
+     * @describe 统计课程上被合课程的数量
+     * @author qnc99
+     * @date 2020/12/8 0008
+     * @param courseIds:
+     * @return java.util.List<java.lang.Long>
+     */
+    List<Map<Long, Integer>> countCourseMergeCourseNum(@Param("courseIds") List<Long> courseIds);
+
 
     /**
      * @param teacherId: 教师编号
@@ -1662,12 +1680,4 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<Long> findNoStudentCourseIds(@Param("courseIds") List<Long> courseIds);
-
-    /**
-     * 获取班级中未开始的合班课程
-     * @author zouxuan
-     * @param classGroupIds
-     * @return
-     */
-    List<CourseSchedule> queryNoStartNewCourseList(@Param("classGroupIds") List<Integer> classGroupIds);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -46,6 +46,16 @@ public class CourseScheduleEndDto extends CourseSchedule {
     
     private String isComplaints;
 
+    private boolean beMerged;
+
+    public boolean getBeMerged() {
+        return beMerged;
+    }
+
+    public void setBeMerged(boolean beMerged) {
+        this.beMerged = beMerged;
+    }
+
     public PracticeGroup getPracticeGroup() {
         return practiceGroup;
     }

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.enums.ComplaintsStatusEnum;
 import com.ym.mec.biz.dal.enums.SignInStatusEnum;
 import com.ym.mec.biz.dal.enums.SignOutStatusEnum;
+import com.ym.mec.biz.dal.enums.UpdateAttendanceEnum;
 
 public class TeacherAttendanceComplaintsDto{
     private String organName;
@@ -27,6 +28,8 @@ public class TeacherAttendanceComplaintsDto{
 
     private ComplaintsStatusEnum complaintsStatusEnum;
 
+    private UpdateAttendanceEnum updateAttendanceEnum;
+
     private String operatorName;
 
     private String signInTime;
@@ -37,6 +40,14 @@ public class TeacherAttendanceComplaintsDto{
 
     private String disposeContent;
 
+    public UpdateAttendanceEnum getUpdateAttendanceEnum() {
+        return updateAttendanceEnum;
+    }
+
+    public void setUpdateAttendanceEnum(UpdateAttendanceEnum updateAttendanceEnum) {
+        this.updateAttendanceEnum = updateAttendanceEnum;
+    }
+
     public Long getTeacherAttendanceId() {
         return teacherAttendanceId;
     }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.ComplaintsStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.UpdateAttendanceEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -80,6 +81,9 @@ public class TeacherAttendance {
 	//申述状态0拒绝1通过2待处理3已撤销
 	private ComplaintsStatusEnum complaintsStatus;
 
+	//申述状态0拒绝1通过2待处理3已撤销
+	private UpdateAttendanceEnum updateAttendanceEnum;
+
 	//申述内容
 	private String complaintsContent;
 
@@ -95,6 +99,14 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签退备注")
 	private String signOutRemark;
 
+	public UpdateAttendanceEnum getUpdateAttendanceEnum() {
+		return updateAttendanceEnum;
+	}
+
+	public void setUpdateAttendanceEnum(UpdateAttendanceEnum updateAttendanceEnum) {
+		this.updateAttendanceEnum = updateAttendanceEnum;
+	}
+
 	public Long getCurrentScheduleId() {
 		return currentScheduleId;
 	}

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/UpdateAttendanceEnum.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * 修复考勤方式  SIGN_IN签到,SIGN_OUT签退,ALL所有
+ */
+public enum UpdateAttendanceEnum implements BaseEnum<String, UpdateAttendanceEnum> {
+	SIGN_IN("SIGN_IN", "签到"),
+	SIGN_OUT("SIGN_OUT", "签退"),
+	ALL("ALL", "所有");
+
+	private String code;
+
+	private String msg;
+
+	UpdateAttendanceEnum(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

+ 25 - 2
mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.event.listener;
 
 import com.ym.mec.biz.event.CourseStatusChangeEvent;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
+import com.ym.mec.common.redis.service.RedisCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +10,8 @@ import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
+import java.util.concurrent.TimeUnit;
+
 /**
  * @Author qnc99
  * @Date 2020/12/2 0002
@@ -18,13 +21,33 @@ public class CourseEventListener {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+    private final static String KEY = "updateCourseActualPrice";
+
     @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+    @Autowired
+    private RedisCache<String, Object> redisCache;
 
     @Async
     @EventListener
     public void courseStatusChangeMonitor(CourseStatusChangeEvent courseStatusChangeEvent){
-        logger.info("课程状态变更:{}", courseStatusChangeEvent.getCourseIds());
-        courseScheduleStudentPaymentService.updateCourseActualPrice();
+        if(redisCache.getRedisTemplate().opsForValue().size(KEY)>0){
+            logger.info("课程状态变更(未执行,任务执行中):{}", courseStatusChangeEvent.getCourseIds());
+            return;
+        }
+
+        Boolean success = redisCache.getRedisTemplate().opsForValue().setIfAbsent(KEY, Thread.currentThread().getId(), 1, TimeUnit.HOURS);
+        if(!success){
+            logger.info("课程状态变更(未执行,任务执行中):{}", courseStatusChangeEvent.getCourseIds());
+            return;
+        }
+
+        logger.info("课程状态变更(执行开始):{}", courseStatusChangeEvent.getCourseIds());
+
+        try{
+            courseScheduleStudentPaymentService.updateCourseActualPrice();
+        } finally {
+            redisCache.delete(KEY);
+        }
     }
 }

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

@@ -625,7 +625,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param courseSchedules:
 	 * @return void
 	 */
-	void mergeCourseReplace(List<CourseSchedule> courseSchedules);
+	List<CourseSchedule> classGroupNotStartMergeCourseReplace(Long classGroupId);
 
 	/**
 	 * @describe 课程合并

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.dto.TeacherAttendanceDetailDto;
 import com.ym.mec.biz.dal.dto.TeacherSignOutDto;
 import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
+import com.ym.mec.biz.dal.enums.UpdateAttendanceEnum;
 import com.ym.mec.biz.dal.page.TeacherAttendanceComplaintsQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.common.page.PageInfo;

+ 10 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3779,10 +3779,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             throw new BizException("主教与助教存在冲突");
         }
         //所选班级不能有未开始的临时合并课程
-        List<CourseSchedule> noStartNewCourseList = courseScheduleDao.queryNoStartNewCourseList(mergeClassSplitClassAffirmDto.getClassGroupIds());
-        if(noStartNewCourseList != null && noStartNewCourseList.size() > 0){
-            throw new BizException("所选班级不能有未开始的临时合并课程");
+        List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
+        if(classGroupIds == null || classGroupIds.size() == 0){
+            throw new BizException("请填写班级信息");
         }
+        for (Integer classGroupId : classGroupIds) {
+            List<CourseSchedule> courseSchedules = courseScheduleService.classGroupNotStartMergeCourseReplace(classGroupId.longValue());
+            if(courseSchedules != null && courseSchedules.size() > 0){
+                throw new BizException("所选班级不能有未开始的临时合并课程");
+            }
+        }
+
         List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
                 .map(ClassGroupTeacherMapper::getUserId)
                 .collect(Collectors.toList());

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -454,13 +454,11 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         classGroupService.updateClassStudentNum(classGroupId.intValue(), allStudentIds.size());
 
-        List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.getClassGroupNotStartCourse(classGroupId);
+        List<CourseSchedule> classGroupNotStartCourse = courseScheduleService.classGroupNotStartMergeCourseReplace(classGroupId);
         if(CollectionUtils.isEmpty(classGroupNotStartCourse)){
             return;
         }
 
-        courseScheduleService.mergeCourseReplace(classGroupNotStartCourse);
-
         if(ClassGroupTypeEnum.MUSIC_NETWORK.equals(classGroup.getType())){
             for (CourseSchedule courseSchedule : classGroupNotStartCourse) {
                 courseSchedule.setName(classGroup.getName());

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

@@ -4447,6 +4447,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 idPracticeMap = practiceGroups.stream().collect(Collectors.toMap(PracticeGroup::getId, e->e));
 			}
 
+			List<Map<Long, Integer>> courseMergeCourseNum = courseScheduleDao.countCourseMergeCourseNum(courseScheduleIds);
+			Map<Long, Integer> courseMergeCourseNumMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(courseMergeCourseNum)){
+				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
+			}
+
 			Set<Long> mergeCourseIds = results.stream().filter(e -> Objects.nonNull(e.getNewCourseId())).map(e -> e.getNewCourseId()).collect(Collectors.toSet());
 
 			//获取班级声部名称
@@ -4477,6 +4483,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 //				}
 				result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
 				result.setIsSettlement(Objects.isNull(result.getSettlementTime())?0:1);
+				if(courseMergeCourseNumMap.containsKey(result.getId())){
+					result.setBeMerged(courseMergeCourseNumMap.get(result.getId())>0?true:false);
+				}
 			}
         }
         pageInfo.setRows(results);
@@ -5258,11 +5267,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	public void mergeCourseReplace(List<CourseSchedule> courseSchedules) {
+	public List<CourseSchedule> classGroupNotStartMergeCourseReplace(Long classGroupId) {
+		List<CourseSchedule> courseSchedules = courseScheduleDao.getClassGroupCourses(classGroupId);
 		Set<Long> newCourseIds = courseSchedules.stream().filter(c -> Objects.nonNull(c.getNewCourseId())).map(CourseSchedule::getNewCourseId).collect(Collectors.toSet());
 		if(CollectionUtils.isEmpty(newCourseIds)){
-			return;
+			return Collections.EMPTY_LIST;
 		}
+
+		Date now = new Date();
+
 		List<CourseSchedule> mainCourses = courseScheduleDao.findByCourseScheduleIds(new ArrayList<>(newCourseIds));
 		Map<Long, CourseSchedule> idCourseMap = mainCourses.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
 		Iterator<CourseSchedule> iterator = courseSchedules.iterator();
@@ -5271,7 +5284,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			if(Objects.isNull(next.getNewCourseId())){
 				continue;
 			}
-			if(next.getClassGroupId().equals(idCourseMap.get(next.getNewCourseId()).getClassGroupId())){
+			CourseSchedule mainCourse = idCourseMap.get(next.getNewCourseId());
+			if(next.getClassGroupId().equals(mainCourse.getClassGroupId())||mainCourse.getStartClassTime().compareTo(now)<0){
 				iterator.remove();
 			}
 		}
@@ -5281,6 +5295,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 			courseSchedule = idCourseMap.get(courseSchedule.getId());
 		}
+		return courseSchedules;
 	}
 
 	@Override

+ 22 - 38
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -74,8 +74,6 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
 	@Autowired
 	private SysConfigDao sysConfigDao;
-	@Autowired
-	private RedisCache<String, Object> redisCache;
 
 	@Override
 	public BaseDAO<Long, CourseScheduleStudentPayment> getDAO() {
@@ -676,47 +674,33 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void updateCourseActualPrice() {
-
-		String key = "updateCourseActualPrice";
-
-		if(redisCache.getRedisTemplate().opsForValue().size(key)>0){
+		List<CourseScheduleStudentPaymentDto> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findNeedUpdateActualPriceStudentCourses();
+		if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
 			return;
 		}
-
-		redisCache.getRedisTemplate().opsForValue().setIfAbsent(key, Thread.currentThread().getId(), 1, TimeUnit.HOURS);
-
-		try {
-			List<CourseScheduleStudentPaymentDto> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findNeedUpdateActualPriceStudentCourses();
-			if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
-				redisCache.delete(key);
-				return;
-			}
-			List<CourseScheduleStudentPayment> needUpdates = new ArrayList<>();
-			Map<CourseStatusEnum, List<CourseScheduleStudentPaymentDto>> statusCoursesMap = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPaymentDto::getCourseStatus));
-			if(statusCoursesMap.containsKey(CourseStatusEnum.NOT_START)){
-				List<CourseScheduleStudentPaymentDto> notStartCourses = statusCoursesMap.get(CourseStatusEnum.NOT_START);
-				for (CourseScheduleStudentPaymentDto notStartCourse : notStartCourses) {
-					studentRegistrationService.updateUserSurplusCourseFee(notStartCourse.getUserId(), notStartCourse.getMusicGroupId(), notStartCourse.getActualPrice(), StringUtils.join("课程状态变更到未开始,退还缴费:", notStartCourse.getCourseScheduleId()), null);
-					notStartCourse.setActualPrice(BigDecimal.ZERO);
-					needUpdates.add(notStartCourse);
-				}
+		List<CourseScheduleStudentPayment> needUpdates = new ArrayList<>();
+		Map<CourseStatusEnum, List<CourseScheduleStudentPaymentDto>> statusCoursesMap = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPaymentDto::getCourseStatus));
+		if(statusCoursesMap.containsKey(CourseStatusEnum.NOT_START)){
+			List<CourseScheduleStudentPaymentDto> notStartCourses = statusCoursesMap.get(CourseStatusEnum.NOT_START);
+			for (CourseScheduleStudentPaymentDto notStartCourse : notStartCourses) {
+				studentRegistrationService.updateUserSurplusCourseFee(notStartCourse.getUserId(), notStartCourse.getMusicGroupId(), notStartCourse.getActualPrice(), StringUtils.join("课程状态变更到未开始,退还缴费:", notStartCourse.getCourseScheduleId()), null);
+				notStartCourse.setActualPrice(BigDecimal.ZERO);
+				needUpdates.add(notStartCourse);
 			}
+		}
 
-			if(statusCoursesMap.containsKey(CourseStatusEnum.OVER)){
-				List<CourseScheduleStudentPaymentDto> notStartCourses = statusCoursesMap.get(CourseStatusEnum.OVER);
-				notStartCourses.sort(Comparator.comparing(CourseScheduleStudentPaymentDto::getCourseStartTime));
-				for (CourseScheduleStudentPaymentDto notStartCourse : notStartCourses) {
-					BigDecimal actualPrice = Objects.isNull(notStartCourse.getActualPrice())?BigDecimal.ZERO:notStartCourse.getActualPrice();
-					BigDecimal deductAmount = studentRegistrationService.updateUserSurplusCourseFee(notStartCourse.getUserId(), notStartCourse.getMusicGroupId(), (notStartCourse.getExpectPrice().subtract(actualPrice)).negate(), StringUtils.join("课程结束,扣除课程费用:", notStartCourse.getCourseScheduleId()), null);
-					notStartCourse.setActualPrice(actualPrice.add(deductAmount.abs()));
-					needUpdates.add(notStartCourse);
-				}
-			}
-			if(!CollectionUtils.isEmpty(needUpdates)){
-				courseScheduleStudentPaymentDao.batchUpdate(needUpdates);
+		if(statusCoursesMap.containsKey(CourseStatusEnum.OVER)){
+			List<CourseScheduleStudentPaymentDto> notStartCourses = statusCoursesMap.get(CourseStatusEnum.OVER);
+			notStartCourses.sort(Comparator.comparing(CourseScheduleStudentPaymentDto::getCourseStartTime));
+			for (CourseScheduleStudentPaymentDto notStartCourse : notStartCourses) {
+				BigDecimal actualPrice = Objects.isNull(notStartCourse.getActualPrice())?BigDecimal.ZERO:notStartCourse.getActualPrice();
+				BigDecimal deductAmount = studentRegistrationService.updateUserSurplusCourseFee(notStartCourse.getUserId(), notStartCourse.getMusicGroupId(), (notStartCourse.getExpectPrice().subtract(actualPrice)).negate(), StringUtils.join("课程结束,扣除课程费用:", notStartCourse.getCourseScheduleId()), null);
+				notStartCourse.setActualPrice(actualPrice.add(deductAmount.abs()));
+				needUpdates.add(notStartCourse);
 			}
-		} finally {
-			redisCache.delete(key);
+		}
+		if(!CollectionUtils.isEmpty(needUpdates)){
+			courseScheduleStudentPaymentDao.batchUpdate(needUpdates);
 		}
 	}
 }

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

@@ -2066,7 +2066,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 sysMessageService.batchSendMessage(MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1", "",
                         studentRegistration.getParentsName(), studentPaymentOrder.getActualAmount());
             }
-            studentRegistrationService.updateUserSurplusCourseFee(userId,musicGroupId,amount.negate(),"",userId);
+            studentRegistrationService.updateUserSurplusCourseFee(userId,musicGroupId,amount,"乐团续费",userId);
             return true;
         } else {
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().doubleValue() > 0) {

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1293,8 +1293,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
         Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = new HashMap<>();
         if(Objects.nonNull(classGroupId)){
-            List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.getClassGroupNotStartCourse(classGroupId);
-            courseScheduleService.mergeCourseReplace(classGroupNotStartCourse);
+            List<CourseSchedule> classGroupNotStartCourse = courseScheduleService.classGroupNotStartMergeCourseReplace(classGroupId);
             typeCourseMap = classGroupNotStartCourse.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
             for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
                 int totalCourseDuration = 0;

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

@@ -746,6 +746,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("考勤信息不存在");
 		}
 		if(teacherAttendance.getComplaintsStatus() == ComplaintsStatusEnum.WAIT){
+			if(signInStatus != null && signOutStatus != null){
+				teacherAttendance.setUpdateAttendanceEnum(UpdateAttendanceEnum.ALL);
+			}else if (signInStatus != null){
+				teacherAttendance.setUpdateAttendanceEnum(UpdateAttendanceEnum.SIGN_IN);
+			}else if (signOutStatus != null){
+				teacherAttendance.setUpdateAttendanceEnum(UpdateAttendanceEnum.SIGN_OUT);
+			}
 			StringBuffer remark = new StringBuffer("同意异常考勤申述");
 			CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
 			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);

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

@@ -2054,6 +2054,10 @@
         SELECT * FROM course_schedule WHERE class_group_id_=#{classGroupId} AND CONCAT(class_date_,' ', start_class_time_) &gt; NOW()
     </select>
 
+    <select id="getClassGroupCourses" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule WHERE class_group_id_=#{classGroupId}
+    </select>
+
     <delete id="deleteCourseSchedulesByClassGroupIds">
         DELETE FROM course_schedule WHERE id_ IN
         <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
@@ -3422,15 +3426,19 @@
         SELECT * FROM course_schedule WHERE id_ = #{courseId} FOR UPDATE
     </select>
 
-    <select id="queryNoStartNewCourseList" resultMap="CourseSchedule">
-        SELECT * FROM course_schedule
-        WHERE new_course_id_ IS NOT NULL AND new_course_id_ > 0
-        AND CONCAT(class_date_,' ',start_class_time_) > NOW()
-        AND del_flag_ = 0 AND is_lock_ = 0
-        AND class_group_id_ IN
-        <foreach collection="classGroupIds" open="(" close=")" separator="," item="item">
-            #{item}
-        </foreach>
+    <select id="countCourseMergeCourseNum" resultType="java.util.Map">
+        SELECT
+            new_course_id_ AS 'key',
+            COUNT( id_ ) AS 'value'
+        FROM
+            course_schedule
+        WHERE
+            new_course_id_ IN
+            <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+                #{courseId}
+            </foreach>
+        GROUP BY
+            new_course_id_
     </select>
 
 </mapper>

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

@@ -396,7 +396,7 @@
     <select id="getMusicGroupGoodsAndDiscount" resultMap="MusicGroupGoods">
         SELECT g.* FROM subject_goods_mapper sgm
         LEFT JOIN goods g ON sgm.goods_category_id_ = g.goods_category_id_
-        WHERE sgm.subject_id_ = #{subjectId} and g.status_ != 0
+        WHERE sgm.subject_id_ = #{subjectId} AND g.music_group_show_=1 AND g.status_ != 0
         <if test="type!=null">
             AND g.type_ = #{type}
         </if>

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

@@ -17,6 +17,7 @@
         <result column="sign_in_status_" property="signInStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="sign_out_status_" property="signOutStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="update_attendance_type_" property="updateAttendanceEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="remark_" property="remark"/>
         <result column="create_time_" property="createTime"/>
         <result column="current_class_times_" property="currentClassTimes"/>
@@ -56,11 +57,12 @@
         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_attachments_,
-        sign_out_remark_)
+        sign_out_remark_,update_attendance_type_)
         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},#{signOutAttachments},#{signOutRemark})
+        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments},#{signOutRemark},
+        #{updateAttendanceEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
@@ -68,7 +70,7 @@
         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_,sign_out_attachments_,
-        sign_out_remark_)
+        sign_out_remark_,update_attendance_type_)
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -78,7 +80,8 @@
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},
-            #{teacherAttendance.signOutAttachments},#{teacherAttendance.signOutRemark})
+            #{teacherAttendance.signOutAttachments},#{teacherAttendance.signOutRemark},
+            #{teacherAttendance.updateAttendanceEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
 
@@ -86,6 +89,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance">
         UPDATE teacher_attendance
         <set>
+            <if test="updateAttendanceEnum != null">
+                update_attendance_type_ = #{updateAttendanceEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="signInStatus != null">
                 sign_in_status_ = #{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
@@ -500,13 +506,14 @@
         <result property="complaintsContent" column="complaints_content_"/>
         <result property="disposeContent" column="dispose_content_"/>
         <result property="teacherAttendanceId" column="teacher_attendance_id_"/>
+        <result property="updateAttendanceEnum" column="update_attendance_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
     <select id="queryTeacherAttendanceComplaints" resultMap="TeacherAttendanceComplaintsDtoMap">
         SELECT o.name_ organ_name_,ta.course_schedule_id_,cs.name_ course_schedule_name_,cs.class_date_ course_schedule_time_,
         IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
         IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
         suo.real_name_ operator_name_,su.real_name_ teacher_name_,ta.complaints_status_,ta.sign_in_time_,ta.sign_out_time_
-        ,ta.complaints_content_,ta.dispose_content_,cs.end_class_time_,cs.start_class_time_,ta.id_ teacher_attendance_id_
+        ,ta.complaints_content_,ta.dispose_content_,cs.end_class_time_,cs.start_class_time_,ta.id_ teacher_attendance_id_,ta.update_attendance_type_
         FROM teacher_attendance ta
         LEFT JOIN sys_user su ON ta.teacher_id_ = su.id_
         LEFT JOIN teacher t ON t.id_ = su.id_

+ 3 - 2
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.event.source.CourseEventSource;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,7 +80,7 @@ public class TaskController extends BaseController {
 	private StudentGoodsSellService studentGoodsSellService;
 
 	@Autowired
-	private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+	private CourseEventSource courseEventSource;
 
 	@GetMapping(value = "/autoAffirmReceiveTask")
 	// 自动确认收货
@@ -294,6 +295,6 @@ public class TaskController extends BaseController {
 
 	@GetMapping("/updateCourseActualPrice")
 	public void updateCourseActualPrice(){
-		courseScheduleStudentPaymentService.updateCourseActualPrice();
+		courseEventSource.courseStatusChange(null);
 	}
 }

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TeacherAttendanceController.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.TeacherAttendance;
+import com.ym.mec.biz.dal.enums.UpdateAttendanceEnum;
 import com.ym.mec.biz.dal.page.TeacherAttendanceComplaintsQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.service.TeacherAttendanceService;
@@ -114,7 +115,7 @@ public class TeacherAttendanceController extends BaseController {
     @ApiOperation(value = "同意教师异常考勤申述")
     @PostMapping("/agreeTeacherAttendanceComplaints")
     @PreAuthorize("@pcs.hasPermissions('teacherAttendance/agreeTeacherAttendanceComplaints')")
-    public Object agreeTeacherAttendanceComplaints(Integer signInStatus,Integer signOutStatus,long teacherAttendanceId,String content){
+    public Object agreeTeacherAttendanceComplaints(Integer signInStatus, Integer signOutStatus, long teacherAttendanceId, String content){
         teacherAttendanceService.agreeTeacherAttendanceComplaints(signInStatus,signOutStatus,teacherAttendanceId,content);
         return succeed();
     }