Ver código fonte

Merge branch 'master' into online1

# Conflicts:
#	mec-student/src/main/java/com/ym/mec/student/config/WebMvcConfig.java
#	mec-teacher/src/main/java/com/ym/mec/teacher/config/WebMvcConfig.java
Joburgess 4 anos atrás
pai
commit
d5bda04eda
36 arquivos alterados com 444 adições e 270 exclusões
  1. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  2. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserContractsDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserContracts.java
  6. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  7. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ArrearageStudentsQueryInfo.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java
  9. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionItemPlanQueryInfo.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionQueryInfo.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ContractService.java
  12. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  13. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  14. 18 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  15. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  16. 8 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  17. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/InspectionItemServiceImpl.java
  18. 6 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  19. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserContractsServiceImpl.java
  20. 24 23
      mec-biz/src/main/resources/config/contracts/product.ftl
  21. 4 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  22. 19 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  23. 25 12
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  24. 3 3
      mec-biz/src/main/resources/config/mybatis/InspectionItemMapper.xml
  25. 2 2
      mec-biz/src/main/resources/config/mybatis/InspectionItemPlanMapper.xml
  26. 2 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  27. 8 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml
  28. 6 3
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  29. 162 157
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  30. 3 4
      mec-biz/src/main/resources/config/mybatis/StudentVisitMapper.xml
  31. 4 3
      mec-biz/src/main/resources/config/mybatis/SysUserContractsMapper.xml
  32. 1 3
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  33. 26 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  34. 6 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  35. 3 0
      mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemController.java
  36. 2 0
      mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemPlanController.java

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

@@ -105,7 +105,7 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds);
     List<String> getLessThenThreeMusicGroup(@Param("organIds") Set<Integer> organIds);
 
-    int queryErrInspection(@Param("organIds") Set<Integer> organIds);
+    int queryErrInspection(@Param("organIds") Set<Integer> organIds, @Param("startTime") String startTime);
 
     int countNoPaymentStudentNum(@Param("organIds") Set<Integer> organIds);
     List<String> getNoPaymentMusicGroup(@Param("organIds") Set<Integer> organIds);
@@ -150,21 +150,21 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @param organIdsStr
      * @return
      */
-    int queryInspectionItem(@Param("organIdsStr") String organIdsStr);
+    int queryInspectionItem(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime);
 
     /**
      * 乐团巡查任务未提交
      * @param organIdsStr
      * @return
      */
-    int queryInspectionItemPlan(@Param("organIdsStr") String organIdsStr);
+    int queryInspectionItemPlan(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime);
 
     /**
      * 未完成的回访任务
      * @param organIdsStr
      * @return
      */
-    int queryStudentVisit(@Param("organIdsStr") String organIdsStr);
+    int queryStudentVisit(@Param("organIdsStr") String organIdsStr, @Param("startTime") String startTime);
 
     List<IndexBaseMonthData> getFinancePayData(@Param("dayStr") String dayStr);
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserContractsDao.java

@@ -18,7 +18,8 @@ public interface SysUserContractsDao extends BaseDAO<Long, SysUserContracts> {
      * @return java.util.List<com.ym.mec.biz.dal.entity.SysUserContracts>
      */
     List<SysUserContracts> getUserContractWithType(@Param("userId") Integer userId,
-                                                   @Param("contractType") SysUserContracts.ContractType contractType);
+                                                   @Param("contractType") SysUserContracts.ContractType contractType,
+                                                   @Param("version") Integer version);
 	
     /**
      * 获取最近一次的协议

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

@@ -16,6 +16,14 @@ import com.ym.mec.common.enums.BaseEnum;
  */
 public class MusicGroupPaymentCalender {
 
+	public Integer getChargeTypeId() {
+		return chargeTypeId;
+	}
+
+	public void setChargeTypeId(Integer chargeTypeId) {
+		this.chargeTypeId = chargeTypeId;
+	}
+
 	public enum PaymentCalenderStatusEnum implements BaseEnum<String, PaymentCalenderStatusEnum> {
 		AUDITING("审核中"), REJECT("拒绝"), NO("未开启缴费"), OPEN("开启缴费"), OVER("缴费已结束"), PAID("已缴费");
 
@@ -140,6 +148,9 @@ public class MusicGroupPaymentCalender {
 	@ApiModelProperty(value = "批次号", required = false)
 	private String batchNo;
 
+	@ApiModelProperty(value = "chargeTypeId", required = false)
+	private Integer chargeTypeId;
+
 	public String getAuditMemo() {
 		return auditMemo;
 	}

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import org.apache.commons.lang3.StringUtils;
@@ -64,6 +65,9 @@ public class StudentAttendance {
 	@ApiModelProperty(value = "状态(正常、旷课、请假、休学)",required = false)
 	private StudentAttendanceStatusEnum status;
 
+	@ApiModelProperty(value = "是否回访)",required = false)
+	private YesOrNoEnum visitFlag;
+
 	private Date signInTime;
 
 	private Date signOutTime;
@@ -82,6 +86,14 @@ public class StudentAttendance {
 	@ApiModelProperty(value = "缴费状态")
 	private String paymentStatus = "PAID_COMPLETED";
 
+	public YesOrNoEnum getVisitFlag() {
+		return visitFlag;
+	}
+
+	public void setVisitFlag(YesOrNoEnum visitFlag) {
+		this.visitFlag = visitFlag;
+	}
+
 	public String getPaymentStatus() {
 		return paymentStatus;
 	}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserContracts.java

@@ -52,9 +52,19 @@ public class SysUserContracts {
 	/** 备注 */
 	private String memo;
 
+	private Integer version;
+
 	/** 创建时间 */
 	private java.util.Date createTime;
 
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}

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

@@ -20,8 +20,8 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     COURSE_LEAVE_STUDENT_NUM("COURSE_LEAVE_STUDENT_NUM", "学员请假"),
 
     TEACHER_INFO("TEACHER_INFO", "日常行政"),
-    TEACHER_EXCEPTION_ATTENDANCE("TEACHER_EXCEPTION_ATTENDANCE", "老师考勤异常"),
-    TEACHER_NOT_A_CLASS("TEACHER_NOT_A_CLASS", "老师未签到签退"),
+    TEACHER_EXCEPTION_ATTENDANCE("TEACHER_EXCEPTION_ATTENDANCE", "课程考勤异常"),
+    TEACHER_NOT_A_CLASS("TEACHER_NOT_A_CLASS", "课程异常"),
     TEACHER_LEAVE("TEACHER_LEAVE", "老师请假"),
     TEACHER_EXPECT_SALARY_BE_LOW("TEACHER_EXPECT_SALARY_BE_LOW", "预计课酬较低"),
     INSPECTION_ITEM("INSPECTION_ITEM", "乐团巡查任务未计划"),

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ArrearageStudentsQueryInfo.java

@@ -23,4 +23,28 @@ public class ArrearageStudentsQueryInfo extends QueryInfo {
     public void setOrganIds(String organIds) {
         this.organIds = organIds;
     }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public Integer getEduTeacherId() {
+        return eduTeacherId;
+    }
+
+    public void setEduTeacherId(Integer eduTeacherId) {
+        this.eduTeacherId = eduTeacherId;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java

@@ -75,6 +75,17 @@ public class EndCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "合并课程类型,MASTER 主课,ASSIST 副课,ALL 全部")
     private String mergeCourseType;
 
+    @ApiModelProperty(value = "ERR_ATTENDANCE 考勤异常,NO_ATTENDANCE 课程异常")
+    private String searchType;
+
+    public String getSearchType() {
+        return searchType;
+    }
+
+    public void setSearchType(String searchType) {
+        this.searchType = searchType;
+    }
+
     public String getMergeCourseType() {
         return mergeCourseType;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionItemPlanQueryInfo.java

@@ -44,6 +44,17 @@ public class InspectionItemPlanQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "乐团巡查任务未提交:INSPECTION_ITEM_PLAN 乐团巡查事项异常:MUSIC_PATROL_ITEM",required = false)
     private String searchType;
 
+    private String searchStartTime;
+
+    public String getSearchStartTime() {
+        return searchStartTime;
+    }
+
+    public void setSearchStartTime(String searchStartTime) {
+        this.searchStartTime = searchStartTime;
+    }
+
+
     public String getSearchType() {
         return searchType;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionQueryInfo.java

@@ -29,6 +29,16 @@ public class InspectionQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "查询类型 INSPECTION_ITEM 乐团巡查任务未计划,回访任务未完成 STUDENT_VISIT",required = false)
     private String searchType;
 
+    private String searchStartTime;
+
+    public String getSearchStartTime() {
+        return searchStartTime;
+    }
+
+    public void setSearchStartTime(String searchStartTime) {
+        this.searchStartTime = searchStartTime;
+    }
+
     public String getSearchType() {
         return searchType;
     }

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

@@ -9,6 +9,9 @@ import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
 
 public interface ContractService {
 
+	//协议版本
+	Integer CONTRACT_VERSION=2;
+
 	/**
 	 * 用户注册
 	 * @param userId

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

@@ -2306,6 +2306,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 tm.setUpdateTime(date);
                 classGroupTeacherMapperDao.insert(tm);
             }
+            imUserFriendService.refreshClassImUserFriend(classGroupId);
             return classGroup;
         }
         if (classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {

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

@@ -1062,6 +1062,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		sysUserContracts.setType(ContractType.PRODUCT);
 		sysUserContracts.setUrl(pdfFilePath);
 		sysUserContracts.setUserId(userId);
+		sysUserContracts.setVersion(CONTRACT_VERSION);
 
 		sysUserContractsService.insert(sysUserContracts);
 

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

@@ -1439,6 +1439,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		List<CourseScheduleModifyLog> modifyLogs = getModifyLogs(courseIds,existCourses,sysUser.getId(),now);
 
 		for (CourseSchedule existCours : existCourses) {
+			if(now.compareTo(existCours.getStartClassTime())>0){
+				throw new BizException("进行中或已结束课程不可调整");
+			}
 			CourseSchedule ac = idCourseMap.get(existCours.getId());
 
 			if(now.compareTo(ac.getStartClassTime())>0){
@@ -1447,6 +1450,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 			int singleClassMinutes = DateUtil.minutesBetween(existCours.getStartClassTime(), existCours.getEndClassTime());
 
+			existCours.setStatus(CourseStatusEnum.NOT_START);
 			existCours.setClassDate(ac.getClassDate());
 			existCours.setUpdateTime(now);
 			existCours.setStartClassTime(ac.getStartClassTime());
@@ -3125,7 +3129,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if (DateUtil.minutesBetween(newCourseSchedule.getStartClassTime(), practiceGroup.getCoursesStartDate()) > 0) {
 						throw new BizException("调整失败: 调整时间不得早于开课时间");
 					}
-					if (DateUtil.minutesBetween(practiceGroup.getCoursesExpireDate(), newCourseSchedule.getEndClassTime()) > 0) {
+					if (!DateUtil.isSameDay(practiceGroup.getCoursesExpireDate(), newCourseSchedule.getEndClassTime())&&DateUtil.minutesBetween(practiceGroup.getCoursesExpireDate(), newCourseSchedule.getEndClassTime()) > 0) {
 						throw new BizException("调整失败: 截止时间超过课程有效期");
 					}
 				}
@@ -3188,22 +3192,19 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             newTeacherIdList.addAll(newCourseSchedule.getTeachingTeacherIdList());
             newTeacherIdList.add(newCourseSchedule.getActualTeacherId());
 
-			if (newCourseSchedule.getStatus() != CourseStatusEnum.OVER) {
-				// 清理原来考勤
-				teacherAttendanceDao.deletebyCourseScheduleId(courseScheduleId);
-
-				// 新增考勤
-				for (Integer teacherId : newTeacherIdList) {
-					TeacherAttendance ta = new TeacherAttendance();
-					ta.setClassGroupId(newCourseSchedule.getClassGroupId());
-					ta.setCourseScheduleId(courseScheduleId);
-					ta.setCreateTime(date);
-					ta.setGroupType(newCourseSchedule.getGroupType());
-					ta.setMusicGroupId(newCourseSchedule.getMusicGroupId());
-					ta.setTeacherId(teacherId);
-					insertTeacherAttendanceList.add(ta);
-				}
-				
+			// 清理原来考勤
+			teacherAttendanceDao.deletebyCourseScheduleId(courseScheduleId);
+
+			// 新增考勤
+			for (Integer teacherId : newTeacherIdList) {
+				TeacherAttendance ta = new TeacherAttendance();
+				ta.setClassGroupId(newCourseSchedule.getClassGroupId());
+				ta.setCourseScheduleId(courseScheduleId);
+				ta.setCreateTime(date);
+				ta.setGroupType(newCourseSchedule.getGroupType());
+				ta.setMusicGroupId(newCourseSchedule.getMusicGroupId());
+				ta.setTeacherId(teacherId);
+				insertTeacherAttendanceList.add(ta);
 			}
 
 			if(newCourseSchedule.getStatus() == CourseStatusEnum.NOT_START && newCourseSchedule.getGroupType() == GroupType.MUSIC){

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -673,6 +673,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             boolean signInInRange = false;
             boolean signOutInRange = false;
             if(Objects.nonNull(school)&&Objects.nonNull(school.getLongitudeLatitude())
+                    &&Objects.nonNull(teacherAttendance)
                     &&StringUtils.isNotBlank(teacherAttendance.getSignInLongitudeLatitude())
                     &&StringUtils.isNotBlank(teacherAttendance.getSignOutLongitudeLatitude())){
                 double signInDistance = MapUtil.distance(teacherAttendance.getSignInLongitudeLatitude(),
@@ -1288,6 +1289,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             if(idTeacherAttendanceMap.containsKey(t.getTeacherId())){
                 TeacherAttendance teacherAttendance = idTeacherAttendanceMap.get(t.getTeacherId());
                 t.setTeacherAttendance(teacherAttendance);
+                t.setTeacherAttendanceId(teacherAttendance.getId());
                 t.setSignInTime(teacherAttendance.getSignInTime());
                 t.setSignInStatus(Objects.nonNull(teacherAttendance.getSignInStatus())?(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())?SignInStatusEnum.UNUSUAL:SignInStatusEnum.NORMAL):SignInStatusEnum.NO);
                 t.setSignOutTime(teacherAttendance.getSignOutTime());

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

@@ -358,7 +358,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			List<IndexErrInfoDto> oneChild = new ArrayList<>();
 
 			oneChild.add(new IndexErrInfoDto(IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE, IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE.getMsg(), indexBaseMonthDataDao.countLessThenThreeClassGroupNum(organIds), null));
-			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds);
+			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds,startTime);
 			oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM, IndexErrorType.MUSIC_PATROL_ITEM.getMsg(),errInspection, null));
 
 			one.setNum(oneChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
@@ -405,13 +405,13 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			int lowTeacherSalary = indexBaseMonthDataDao.queryLowTeacherSalary(organIdsStr,monthStr);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXPECT_SALARY_BE_LOW, IndexErrorType.TEACHER_EXPECT_SALARY_BE_LOW.getMsg(),lowTeacherSalary, null));
 
-			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr);
+			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM, IndexErrorType.INSPECTION_ITEM.getMsg(),inspectionItem, null));
 
-			int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr);
+			int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr,startTime);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM_PLAN, IndexErrorType.INSPECTION_ITEM_PLAN.getMsg(),inspectionItemPlan, null));
 
-			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr);
+			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_VISIT, IndexErrorType.STUDENT_VISIT.getMsg(),studentVisit, null));
 
 			three.setNum(threeChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
@@ -470,7 +470,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			flag1 = true;
 		}
 		if(!flag1){
-			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds);
+			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds,startTime);
 			if(errInspection > 0){
 				flag1 = true;
 			}
@@ -529,19 +529,19 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			}
 		}
 		if(!flag3){
-			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr);
+			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime);
 			if(inspectionItem > 0){
 				flag3 = true;
 			}
 		}
 		if(!flag3){
-			int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr);
+			int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr,startTime);
 			if(inspectionItemPlan > 0){
 				flag3 = true;
 			}
 		}
 		if(!flag3){
-			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr);
+			int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime);
 			if(studentVisit > 0){
 				flag3 = true;
 			}

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

@@ -38,6 +38,12 @@ public class InspectionItemServiceImpl extends BaseServiceImpl<Long, InspectionI
             queryInfo.setStartTime(DateUtil.getFirstDayOfMonth(queryInfo.getMonth()));
             queryInfo.setEndTime(DateUtil.getLastTimeWithDay(DateUtil.getLastDayOfMonth(queryInfo.getMonth())));
         }
+        if (queryInfo.getStartTime() != null) {
+            queryInfo.setStartTime(DateUtil.getFirstDayOfMonth(queryInfo.getStartTime()));
+        }
+        if (queryInfo.getEndTime() != null) {
+            queryInfo.setEndTime(DateUtil.getLastTimeWithDay(DateUtil.getLastDayOfMonth(queryInfo.getEndTime())));
+        }
         PageInfo<InspectionItem> pageInfo = this.queryPage(queryInfo);
         if (pageInfo.getTotal() <= 0) {
             return pageInfo;
@@ -54,7 +60,6 @@ public class InspectionItemServiceImpl extends BaseServiceImpl<Long, InspectionI
                 if (row.getItem().equals(InspectionItemEnum.INSPECT)) continue;
                 for (TeacherVisitDto teacherVisitCount : teacherVisitCounts) {
                     if (teacherVisitCount.getTeacherId().equals(row.getUserId()) &&
-                            teacherVisitCount.getOrganId().equals(row.getOrganId()) &&
                             DateUtil.dateToString(row.getMonth(), "yyyy-MM").equals(teacherVisitCount.getMonth())
                     ) {
                         row.setSubmittedTimes(teacherVisitCount.getNum());

+ 6 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -436,16 +436,6 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         return result;
     }
 
-    /**
-     * MUSIC("乐团课"),
-     * VIP("VIP课"),
-     * DEMO("试听课"),
-     * SPORADIC("零星收费"),
-     * PRACTICE("网管课"),
-     *
-     * @param queryInfo
-     * @return
-     */
     @Override
     public PageInfo<StudentVisitCourseHomeWorkDto> getStudentHomeWorks(StudentCourseHomeWorkQueryInfo queryInfo) {
         PageInfo<StudentVisitCourseHomeWorkDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
@@ -458,9 +448,9 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             params.put("offset", pageInfo.getOffset());
             dataList = studentCourseHomeworkDao.getStudentCourseHomeWorks(params);
 
-            List<String> musicGroupIds = dataList.stream().filter(e -> e.getGroupType().equals(GroupType.MUSIC)).map(StudentVisitCourseHomeWorkDto::getGroupId).distinct().collect(Collectors.toList());
-            List<Long> vipGroupIds = dataList.stream().filter(e -> e.getGroupType().equals(GroupType.VIP)).map(e -> Long.parseLong(e.getGroupId())).distinct().collect(Collectors.toList());
-            List<Long> practiceGroupIds = dataList.stream().filter(e -> e.getGroupType().equals(GroupType.PRACTICE)).map(e -> Long.parseLong(e.getGroupId())).distinct().collect(Collectors.toList());
+            List<String> musicGroupIds = dataList.stream().filter(e -> e.getGroupType()!=null).filter(e -> e.getGroupType().equals(GroupType.MUSIC)).map(StudentVisitCourseHomeWorkDto::getGroupId).distinct().collect(Collectors.toList());
+            List<Long> vipGroupIds = dataList.stream().filter(e -> e.getGroupType()!=null).filter(e -> e.getGroupType().equals(GroupType.VIP)).map(e -> Long.parseLong(e.getGroupId())).distinct().collect(Collectors.toList());
+            List<Long> practiceGroupIds = dataList.stream().filter(e -> e.getGroupType()!=null).filter(e -> e.getGroupType().equals(GroupType.PRACTICE)).map(e -> Long.parseLong(e.getGroupId())).distinct().collect(Collectors.toList());
 
             Map<String, List<MusicGroup>> musicGroupMap = new HashMap<>();
             Map<Long, List<VipGroup>> vipGroupMap = new HashMap<>();
@@ -475,13 +465,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
                 practiceGroupMap = practiceGroupDao.getWithIds(practiceGroupIds).stream().collect(Collectors.groupingBy(PracticeGroup::getId));
             }
             for (StudentVisitCourseHomeWorkDto homeWork : dataList) {
-                if (homeWork.getGroupType().equals(GroupType.MUSIC) && musicGroupMap.get(homeWork.getGroupId()).size() > 0) {
+                if (GroupType.MUSIC.equals(homeWork.getGroupType()) && musicGroupMap.containsKey(homeWork.getGroupId())) {
                     homeWork.setGroupName(musicGroupMap.get(homeWork.getGroupId()).get(0).getName());
                 }
-                if (homeWork.getGroupType().equals(GroupType.VIP) && vipGroupMap.get(Long.parseLong(homeWork.getGroupId())).size() > 0) {
+                if (GroupType.VIP.equals(homeWork.getGroupType()) && vipGroupMap.containsKey(Long.parseLong(homeWork.getGroupId()))) {
                     homeWork.setGroupName(vipGroupMap.get(Long.parseLong(homeWork.getGroupId())).get(0).getName());
                 }
-                if (homeWork.getGroupType().equals(GroupType.PRACTICE) && practiceGroupMap.get(Long.parseLong(homeWork.getGroupId())).size() > 0) {
+                if (GroupType.PRACTICE.equals(homeWork.getGroupType()) && practiceGroupMap.containsKey(Long.parseLong(homeWork.getGroupId()))) {
                     homeWork.setGroupName(practiceGroupMap.get(Long.parseLong(homeWork.getGroupId())).get(0).getName());
                 }
             }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.service.ContractService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,7 +25,7 @@ public class SysUserContractsServiceImpl extends BaseServiceImpl<Long, SysUserCo
 
 	@Override
 	public List<SysUserContracts> getUserContractWithType(Integer userId, SysUserContracts.ContractType contractType) {
-		return sysUserContractsDao.getUserContractWithType(userId, contractType);
+		return sysUserContractsDao.getUserContractWithType(userId, contractType, ContractService.CONTRACT_VERSION);
 	}
 
 	@Override

+ 24 - 23
mec-biz/src/main/resources/config/contracts/product.ftl

@@ -31,8 +31,9 @@
             font-size: 14px;
         }
         h1 {
-            font-size: 16px;
+            font-size: 18px;
             text-align: center;
+            margin-bottom: 8px;
         }
         h2 {
             font-size: 16px;
@@ -119,43 +120,43 @@
                 </#if>
             </div>
         </div>
-        <div class="underline">(本协议中“乙方“指学员及家长;”乙方学员“指购买甲方产品或服务的学员;”乙方家长“仅指乙方学员的法定监护人。)</div>
+        <div>(本协议中“乙方“指学员及家长;”乙方学员“指购买甲方产品或服务的学员;”乙方家长“仅指乙方学员的法定监护人。)</div>
 
         <p class="underline bold">重要须知:在注册或购买使用甲方提供的产品、服务之前,请您务必审慎阅读、充分理解本使用协议各条款内容, 特别是免除或者限制甲方责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等。 限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。您注册或购买使用甲方提供的产品和服务,均视为您同意本使用协议,以及同意接受本使用协议的约束。</p>
+        <p class="underline bold">如无特别说明 ,下列术语在本协议中的定义为:管乐迷平台(下称“本平台”),即管乐迷APP;AMR器乐练习系统(下称“本系统”)指由甲方提供和维护的器乐教学全流程辅助系统。乙方通过该系统完成器乐学习。本系统提供包括媒体资料,老师互动点评,课前中后管理等服务。具体功能以该系统实际提供为准,且该系统将根据实际需要进行调整和增减,乙方使用平台时还需遵守本服务协议。</p>
+
         <h2>一、注册及购买</h2>
-        <div class="underline bold">1、无论是否源自甲方建议,乙方选择报名注册加入乐团,或选择购买使用甲方提供的产品和服务,均为乙方自主意愿的表达及独立自主的选择。</div>
+        <div>1、无论是否源自甲方建议,乙方选择报名注册加入乐团,或选择购买使用甲方提供的产品和服务,均为乙方自主意愿的表达及独立自主的选择。</div>
         2、乙方完成所选产品或服务缴费后,甲方向乙方开具加盖公司印章的收款凭据,乙方务必妥善保管。
 
         <h2>二、乐团及上课规范</h2>
         1、乙方学员在应服从甲方的管理,遵守甲方的制度。<br />
-        2、乙方学员应按时到达甲方指定上课地点,好课前准备;如发生迟到、早退或因其他乙方原因未能按时上课的,视为乙方学员放弃该次课程,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时,也不会因乙方学员缺席而暂停教学课程。<br />
+        2、乙方学员应按时到达甲方指定上课地点,好课前准备;如发生迟到、早退或因其他乙方原因未能按时上课的,视为乙方学员放弃该次课程,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时,也不会因乙方学员缺席而暂停教学课程。<br />
         3、乙方学员不得携带任何食品进入教室,所有进食应在课前完成;进入教室后,不得大声喧哗、追逐嬉戏,应当听从授课老师的安排;乙方学员应爱护公共财产和教学设施,严禁在桌椅上刻、划、涂、写等不文明行为;乙方学员未经授课老师同意,不得擅自使用教室内的乐器、音响、电视、空调等器材、设施,如造成此类器材、设施损坏的,乙方应照价赔偿。<br />
         4、未经授课老师同意,乙方家长不得进入课堂,以免影响老师和学员上课;为保证训练质量及进度,乙方学员应保证按照指导老师或教务老师所提出的要求在家练习,遇到专业问题应及时向指导老师请教,非专业问题可随时向教务老师反映。<br />
-        <span class="bold">5、乙方家长应教育及监督乙方学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由乙方自行承担。</span><br />
+        5、乙方家长应教育及监督乙方学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由乙方自行承担。<br />
         6、对于乐团学员出现以下情形时,甲方有权对乙方学员作出警告,如甲方作出警告后,乙方学员仍然不遵守甲方的管理制度的,甲方有权对其作出退团等处分。<br />
-        6.1上课、排练时不服从管理和指导,不遵守纪律,影响其他团员的正常上课、排练;<br />
-        6.2一个学期内发生两次及以上旷课行为;<br />
-        6.3一个学期内发生两次及以上未按老师要求回传视频作业的情形;<br />
-        6.4无特殊原因连续七天不练习,影响团员和乐团的整体水平的。<br />
+        &#160;&#160;6.1上课、排练时不服从管理和指导,不遵守纪律,影响其他团员的正常上课、排练;<br />
+        &#160;&#160;6.2一个学期内发生两次及以上旷课行为;<br />
+        &#160;&#160;6.3一个学期内发生两次及以上未按老师要求回传视频作业的情形;<br />
+        &#160;&#160;6.4无特殊原因连续七天不练习,影响团员和乐团的整体水平的。<br />
 
         <h2>三、请假</h2>
-        1、基于教学进度和质量保证,甲方对于课程延续性有严格要求,因此乙方学员应尽量参加课程,无特殊情况则应避免请假。<br />
-        <div class="bold">2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷App完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。</div>
-        3、VIP学员如遇特殊情况需要长期请假时,可向甲方/授课老师申请办理临时休会。学员可在6个月内申请复学,超过6个月未申请复学的,甲方有权按自动退会处理。<span class="bold">VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。</span><br />
-        <span class="bold">4、鉴于团课的特殊性,团课学员个人请假,当次课程仍视同发生,系统将自动记录结算课时并扣除相应课程费用。</span><br />
-        5、每期课程均有相对应的有效期,乙方应在有效期内完成课程,10次课一期的,自交费之日起4个月内有效;20次课一期的,自交费之日起8个月内有效;40次课一期的,自交费之日起16个月内有效。<span class="bold">如果由于指导老师请假等原因造成课程不能如期完成的,课程有效期将顺延;如课程超出有效期限,乙方所缴纳的课程费用将自动扣除逾期未完成的课时后自动清零。</span><br />
+        1、基于教学进度和质量保证,甲方对于课程延续性有严格要求,因此乙方学员应尽量参加课程,无特殊情况则应避免请假。
+        <div>2、VIP课程学员如有特殊情况需要请假的,应提前4小时以上通过管乐迷APP完成请假,否则当次课程将视同发生,系统将自动记录结算课时并扣除相应课程费用。</div>
+        VIP课程为一对二课程的,其中一位学员申请临时休会的,还需征得同组另一位学员的同意后方可申请休会。否则将不予受理。
+        <div>3、鉴于团体课的特殊性,团体课学员个人请假,当次课程仍视同发生。</div>
 
         <h2>四、退费</h2>
-        <span class="bold">1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日内提出申请可全额退还,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;</span><br />
-        <span class="bold">2、乐保服务,在维修老师下校检查前提出申请可全额退还,下校检查日过后则不予退费;</span><br />
-        <span class="bold">3、非个别课程,包括但不限于声部基础课、合奏课、基础技能课、网基课、集训课、VIP课程项下一对二等,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;</span><br />
-        <span class="bold">4、正价购买的个别课程,包括但不限于VIP课程项下一对一、网管课等,课程有效期内可申请退费,可退款金额为:购买金额-课时原价*已消耗课时数量;</span><br />
-        <span class="bold">5、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;</span><br />
-        <span class="bold highlight">从您提出退费申请到您收到退款的时间,会因为您订购时所选择的付款方式而有所不同,通常符合规定的退费会在15个工作日内完成退款操作。</span><br />
+        1、乐器、教辅、配件等,未经签收,自购买缴款之日起15日内提出申请可全额退还,超过上述期限则不予受理退费申请;非因商品本身存在质量问题,一经签收,无论使用与否,均不予退费;<br />
+        2、乐保服务,在维修老师下校检查前提出申请可全额退还,下校检查日过后则不予退费;<br />
+        3、AMR器乐练习系统服务,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已提供相应服务则一律不予受理退费;<br />
+        4、正价购买的个别课程,包括但不限于VIP课程项下一对一、网管课等,课程有效期内可申请退费,可退款金额为:购买金额-课时原价*已消耗课时数量;<br />
+        5、活动期间以优惠价格购买的个别课程,自购买缴款之日起15日内提出申请可全额退还,超过上述期限或实际已发生课时消耗的则一律不予受理退费;<br />
 
         <h2>五、违约责任</h2>
-        1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失。<br />
-        2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务及甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失。<br />
+        1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失,包括但不限于守约方因此支付的律师费,差旅费等。<br />
+        2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务及甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失,包括但不限于守约方因此支付的律师费,差旅费等。<br />
 
         <h2>六、保密条款</h2>
         1、双方对本协议的条款、本协议的签订及履行情况以及通过签订和履行本协议而获知的对方及对方关联公司的任何信息均负有保密义务。任何一方不得以任何形式透露给第三方(有关法律法规要求和甲乙双方的法律、会计顾问、授权雇员除外),也不得擅自使用。<br />
@@ -176,7 +177,7 @@
         3、双方确认并同意,本协议的电子版本与纸质版本具有同等法律效力。双方发生争议时,电子合同打印件可作为证据提交。双方通过网络以在线方式签订本协议的 ,则以乙方点击“确认”或“同意”等相关按钮或以电子签名的方式作为对合同内容的同意、确认以及本协议的签署;如双方签订纸质版本协议的,则本协议壹式贰份,甲方盖公章或合同专用章并且乙方签字作为有效签署方式,并且双方各执壹份,每份具有同等法律效力。<br />
         4、本协议自双方按照本协议约定方式签署之日起生效,有效期至双方履行完本协议约定的全部义务时止。<br />
         5、本协议未尽事宜或对本协议的任何修改、补充,有双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br />
-        6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、App推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、App方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。<br />
+        6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。<br />
 
         <div class="signature">
         	<#if isShowVisualSeal>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -639,9 +639,13 @@
         class_group cg
         LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
         LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
+        LEFT JOIN course_schedule cs ON cs.class_group_id_=cg.id_
         WHERE
         cg.type_ IN ('HIGH', 'HIGH_ONLINE')
         AND mg.status_ = 'PROGRESS' AND cg.del_flag_ = 0
+        AND cs.del_flag_=0
+        AND cs.status_='NOT_START'
+        AND ( cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_ )
         <if test="organIds!=null and organIds!=''">
             AND FIND_IN_SET(mg.organ_id_, #{organIds})
         </if>

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

@@ -2320,7 +2320,7 @@
 
     <sql id="endFindCourseSchedulesCondition">
         <where>
-            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            cs.del_flag_ = 0
             <include refid="queryVipCourseScheduleIds"/>
         </where>
     </sql>
@@ -2345,15 +2345,15 @@
             cs.is_lock_,
             s.name_ schoole_name_,
             o.name_ organ_name_,
-            CASE WHEN COUNT(sa.id_) > 0 THEN 1 ELSE 0 END isCallNames,
-            case when count(ta.id_) > 0 then '1' else '0' end is_complaints_
+            CASE WHEN COUNT(CASE WHEN sa.remark_ IS NULL THEN NULL ELSE sa.id_ END) > 0 THEN 1 ELSE 0 END isCallNames,
+            CASE WHEN COUNT(CASE WHEN ta.is_complaints_ = 1 THEN 1 ELSE NULL END) > 0 THEN '1' ELSE '0' END is_complaints_
         FROM
             course_schedule cs
             LEFT JOIN school s ON cs.schoole_id_=s.id_
             LEFT JOIN organization o ON cs.organ_id_=o.id_
             LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
-            left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_ and ta.is_complaints_ = 1
-            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.remark_ IS NULL
+            left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_
+            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
             <include refid="endFindCourseSchedulesCondition"/>
         GROUP BY cs.id_
         ORDER BY course_start_time_,cs.id_
@@ -2365,7 +2365,8 @@
         COUNT(DISTINCT cs.id_)
         FROM
         course_schedule cs
-        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.remark_ IS NULL
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+        LEFT JOIN teacher_attendance ta on ta.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
         <include refid="endFindCourseSchedulesCondition"/>
     </select>
@@ -2483,6 +2484,18 @@
         <if test="search!=null">
             AND (cs.music_group_id_=#{search} OR cs.id_=#{search} OR cs.name_ LIKE CONCAT( '%', #{search}, '%' ))
         </if>
+        <if test="searchType == 'ERR_ATTENDANCE'">
+            AND cs.class_date_>='2021-02-20'
+            AND ta.teacher_id_ = cs.actual_teacher_id_
+            AND cs.status_ = 'OVER'
+            AND (ta.sign_in_status_ != 1 OR ta.sign_out_status_ != 1 OR sa.status_ != 'NORMAL') AND ta.dispose_content_ IS NULL
+            AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
+        </if>
+        <if test="searchType == 'NO_ATTENDANCE'">
+            AND ta.teacher_id_ = cs.actual_teacher_id_
+            AND cs.status_ = 'OVER' AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
+            AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
+        </if>
     </sql>
     <select id="queryPracticeCourseScheduleIds" resultType="java.lang.Integer">
         SELECT cs.id_ FROM course_schedule cs

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

@@ -472,9 +472,13 @@
 		class_group cg
 		LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
 		LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
+		LEFT JOIN course_schedule cs ON cs.class_group_id_=cg.id_
 		WHERE
 		cg.type_ IN ('HIGH', 'HIGH_ONLINE')
 		AND mg.status_ = 'PROGRESS' AND cg.del_flag_ = 0
+		AND cs.del_flag_=0
+		AND cs.status_='NOT_START'
+		AND ( cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_ )
 		<if test="organIds!=null and organIds.size()>0">
 			AND mg.organ_id_ IN
 			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
@@ -582,21 +586,25 @@
 			</if>
 	</select>
     <select id="getAttendanceError" resultType="int">
-		SELECT COUNT(csts.id_) FROM course_schedule_teacher_salary csts
-		LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
-		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = csts.course_schedule_id_ AND ta.teacher_id_ = csts.user_id_
-		WHERE (ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
-		AND (ta.sign_in_time_ IS NOT NULL OR ta.sign_out_time_ IS NOT NULL) AND ta.dispose_content_ IS NULL AND cs.class_date_ >= #{startTime}
+		SELECT COUNT(DISTINCT c.id_) FROM (SELECT cs.id_ FROM course_schedule cs
+		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+		WHERE ta.teacher_id_ = cs.actual_teacher_id_
+		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= #{startTime} AND cs.class_date_>='2021-02-20'
+		AND (ta.sign_in_status_ != 1 OR ta.sign_out_status_ != 1 OR sa.status_ != 'NORMAL') AND ta.dispose_content_ IS NULL
+		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
 		<if test="organIds != null and organIds != ''">
 			AND FIND_IN_SET(cs.organ_id_,#{organIds})
 		</if>
+		GROUP BY cs.id_) c
 	</select>
 	<select id="getNoAttendance" resultType="int">
-		SELECT COUNT(csts.id_) FROM course_schedule_teacher_salary csts
-		LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
-		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = csts.course_schedule_id_ AND ta.teacher_id_ = csts.user_id_
-		WHERE ta.sign_in_time_ IS NULL AND cs.status_ = 'OVER' AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
-		AND cs.del_flag_ = 0 AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_) AND cs.class_date_ >= #{startTime}
+		SELECT COUNT(DISTINCT cs.id_) FROM course_schedule cs
+		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+		WHERE ta.teacher_id_ = cs.actual_teacher_id_
+		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= #{startTime}
+		AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
+		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
 		<if test="organIds != null and organIds != ''">
 			AND FIND_IN_SET(cs.organ_id_,#{organIds})
 		</if>
@@ -621,7 +629,9 @@
 	</select>
 	<select id="queryInspectionItem" resultType="int">
 		SELECT COUNT(DISTINCT ii.id_) FROM inspection_item ii
+		LEFT JOIN inspection i ON ii.inspection_id_ = i.id_
 		WHERE ii.times_ > planned_times_ AND ii.item_ = 'INSPECT' AND ii.memo_ =''
+		AND DATE_FORMAT(i.month_,'%Y-%m-%d') >= #{startTime}
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(ii.organ_id_,#{organIdsStr})
 		</if>
@@ -629,15 +639,18 @@
 	<select id="queryInspectionItemPlan" resultType="int">
 		SELECT COUNT(DISTINCT iip.id_) FROM inspection_item_plan iip
 		WHERE iip.status_ = 0 AND iip.memo_ = '' AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt; DATE_FORMAT(NOW(),'%Y-%m-%d')
+		AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') >= #{startTime} AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt;= DATE_FORMAT(NOW(),'%Y-%m-%d')
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(iip.organ_id_,#{organIdsStr})
 		</if>
 	</select>
 	<select id="queryStudentVisit" resultType="int">
 		SELECT COUNT(DISTINCT ii.id_) FROM inspection_item ii
+		LEFT JOIN inspection i ON ii.inspection_id_ = i.id_
 		WHERE ii.item_ = 'VISIT' AND ii.memo_ =''
 		AND ii.times_ > (SELECT COUNT(DISTINCT sv.id_) FROM student_visit sv
-		WHERE sv.teacher_id_ = ii.user_id_ AND DATE_FORMAT(ii.create_time_,'%Y-%m') = DATE_FORMAT(sv.visit_time_,'%Y-%m'))
+		WHERE sv.teacher_id_ = ii.user_id_ AND DATE_FORMAT(i.month_,'%Y-%m') = DATE_FORMAT(sv.visit_time_,'%Y-%m'))
+		AND i.month_ >= #{startTime} AND i.month_ &lt;= DATE_FORMAT(NOW(),'%Y-%m-%d')
 		<if test="organIdsStr != null and organIdsStr != ''">
 			AND FIND_IN_SET(ii.organ_id_,#{organIdsStr})
 		</if>
@@ -649,7 +662,7 @@
 		FROM
 			inspection_item_plan
 		WHERE
-			conclusion_status_ = 1 AND memo_=''
+			conclusion_status_ = 1 AND memo_ = '' AND DATE_FORMAT(plan_start_,'%Y-%m-%d') >= #{startTime}
 		<if test="organIds!=null and organIds.size()>0">
 			AND organ_id_ IN
 			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">

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

@@ -168,12 +168,12 @@
         <where>
             <if test="searchType != null and searchType != ''">
                 <if test="searchType == 'INSPECTION_ITEM'">
-                    AND ii.times_ > planned_times_ AND ii.item_ = 'INSPECT' AND ii.memo_ =''
+                    AND ii.times_ > planned_times_ AND ii.item_ = 'INSPECT' AND ii.memo_ ='' AND DATE_FORMAT(i.month_,'%Y-%m-%d') >= #{searchStartTime}
                 </if>
                 <if test="searchType == 'STUDENT_VISIT'">
-                    AND ii.item_ = 'VISIT' AND ii.memo_ =''
+                    AND ii.item_ = 'VISIT' AND ii.memo_ ='' AND DATE_FORMAT(i.month_,'%Y-%m-%d') >= #{searchStartTime}
                     AND ii.times_ > (SELECT COUNT(DISTINCT sv.id_) FROM student_visit sv
-                    WHERE sv.teacher_id_ = ii.user_id_ AND DATE_FORMAT(ii.create_time_,'%Y-%m') = DATE_FORMAT(sv.visit_time_,'%Y-%m'))
+                    WHERE sv.teacher_id_ = ii.user_id_ AND DATE_FORMAT(i.month_,'%Y-%m') = DATE_FORMAT(sv.visit_time_,'%Y-%m'))
                 </if>
             </if>
             <if test="organId != null">

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

@@ -162,10 +162,10 @@
             </if>
             <if test="searchType != null and searchType != ''">
                 <if test="searchType == 'MUSIC_PATROL_ITEM'">
-                    AND iip.conclusion_status_ = 1 AND iip.memo_=''
+                    AND iip.conclusion_status_ = 1 AND iip.memo_='' AND iip.plan_start_ >= #{searchStartTime}
                 </if>
                 <if test="searchType == 'INSPECTION_ITEM_PLAN'">
-                    AND iip.status_ = 0 AND iip.memo_ = '' AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt; DATE_FORMAT(NOW(),'%Y-%m-%d')
+                    AND iip.status_ = 0 AND iip.memo_ = '' AND iip.plan_start_ >= #{searchStartTime} AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt; DATE_FORMAT(NOW(),'%Y-%m-%d')
                 </if>
             </if>
             <if test="startTime != null">

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

@@ -437,7 +437,7 @@
 				AND mgpc.music_group_id_ = #{musicGroupId}
 			</if>
 			<if test="cooperationOrganId!=null">
-				AND mg.school_id_ = #{cooperationOrganId}
+				AND mg.cooperation_organ_id_ = #{cooperationOrganId}
 			</if>
 			<if test="eduTeacherId!=null">
 				AND mg.educational_teacher_id_=#{eduTeacherId}
@@ -472,7 +472,7 @@
 			LEFT JOIN sys_user edu ON edu.id_ = mg.educational_teacher_id_
 			LEFT JOIN organization organ ON organ.id_ = mg.organ_id_
 			LEFT JOIN `subject` sub ON sr.actual_subject_id_ = sub.id_
-			LEFT JOIN cooperation_organ co ON mg.school_id_ = co.id_
+			LEFT JOIN cooperation_organ co ON mg.cooperation_organ_id_ = co.id_
 		<include refid="queryArrearageStudentsCondition"/>
 		GROUP BY
 			mgpc.music_group_id_,mgpcd.user_id_

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

@@ -101,7 +101,10 @@
     <sql id="queryPageSql">
         <where>
             <if test="ids != null and ids != ''">
-                FIND_IN_SET(mgq.id_,#{ids})
+                AND FIND_IN_SET(mgq.id_,#{ids})
+            </if>
+            <if test="search != null and search != ''">
+                AND (su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR mg.id_ LIKE CONCAT('%',#{search},'%') OR mg.name_ LIKE CONCAT('%',#{search},'%'))
             </if>
             <if test="visitFlag != null">
                 <if test="visitFlag == 0">
@@ -111,6 +114,9 @@
             <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(mg.organ_id_,#{organId})
             </if>
+            <if test="search != null and search != ''">
+                AND (mgq.user_id_ = #{search} OR mgq.music_group_id_ = #{search})
+            </if>
         </where>
     </sql>
 
@@ -118,6 +124,7 @@
     <select id="queryCount" resultType="int">
         SELECT COUNT(mgq.id_)
         FROM music_group_quit mgq
+        LEFT JOIN sys_user su ON su.id_ = mgq.user_id_
         LEFT JOIN music_group mg ON mg.id_ = mgq.music_group_id_
         <include refid="queryPageSql"/>
     </select>

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

@@ -21,6 +21,7 @@
         <result column="sign_in_time_" property="signInTime"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="visitFlag" property="visitFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
         <result column="remark_" property="remark"/>
@@ -488,7 +489,8 @@
         SELECT cssp.id_,cssp.course_schedule_id_,cssp.user_id_,cssp.group_type_,cssp.music_group_id_,sa.sign_in_time_,sa.sign_out_time_,
                CASE WHEN sa.status_ IS NULL THEN 'TRUANT' ELSE sa.status_ END status_,
         su.username_,su.phone_,su.avatar_,cs.teach_mode_,cs.type_ course_type_,o.name_ organ_name_,tu.real_name_ teacher_name_,cs.name_ course_schedule_name_,cs.status_ course_status_,
-        cs.actual_teacher_id_ teacher_id_,cs.class_date_ ,cs.start_class_time_,cs.end_class_time_ ,cs.new_course_id_
+        cs.actual_teacher_id_ teacher_id_,cs.class_date_ ,cs.start_class_time_,cs.end_class_time_ ,cs.new_course_id_,
+        CASE WHEN MAX(sv.id_) IS NULL THEN 0 ELSE 1 END visitFlag
         FROM course_schedule_student_payment cssp left join course_schedule cs on cs.id_ = cssp.course_schedule_id_
         left join student_attendance sa on cssp.course_schedule_id_ = sa.course_schedule_id_ and cssp.user_id_ = sa.user_id_
         LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
@@ -496,7 +498,8 @@
         left join organization o on o.id_ = cs.organ_id_
         LEFT JOIN student_visit sv ON cssp.id_ = sv.object_id_
         <include refid="findStudentAttendanceSql"/>
-        ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) asc
+        GROUP BY cssp.id_
+        ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) ASC
         <include refid="global.limit"/>
     </select>
     <sql id="findStudentAttendanceSql">
@@ -557,7 +560,7 @@
     </sql>
     
     <select id="countStudentAttendance" resultType="java.lang.Integer">
-        SELECT count(cssp.id_) 
+        SELECT count(DISTINCT cssp.id_)
         FROM course_schedule_student_payment cssp
         left join course_schedule cs on cs.id_ = cssp.course_schedule_id_
         left join student_attendance sa on cssp.course_schedule_id_ = sa.course_schedule_id_ and cssp.user_id_ = sa.user_id_

+ 162 - 157
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -21,7 +21,7 @@
         <result column="remark_" property="remark"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="is_replied_" property="isReplied" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="is_replied_timely_" property="isRepliedTimely" />
+        <result column="is_replied_timely_" property="isRepliedTimely"/>
         <result column="is_view_" property="isView" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="submit_time_" property="submitTime"/>
     </resultMap>
@@ -50,13 +50,17 @@
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentCourseHomework">
-		SELECT * FROM student_course_homework WHERE id_ = #{id}
-	</select>
+        SELECT *
+        FROM student_course_homework
+        WHERE id_ = #{id}
+    </select>
 
     <!-- 全查询 -->
     <select id="findAll" resultMap="StudentCourseHomework">
-		SELECT * FROM student_course_homework ORDER BY id_
-	</select>
+        SELECT *
+        FROM student_course_homework
+        ORDER BY id_
+    </select>
 
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentCourseHomework" useGeneratedKeys="true"
@@ -128,8 +132,10 @@
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">
-		DELETE FROM student_course_homework WHERE id_ = #{id}
-	</delete>
+        DELETE
+        FROM student_course_homework
+        WHERE id_ = #{id}
+    </delete>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseHomeworkListDto" id="CourseHomeworkDto">
         <result column="id_" property="id"/>
@@ -174,21 +180,21 @@
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="CourseHomeworkDto" parameterType="map">
         SELECT
-            sch.id_,
-            ch.*,
-            IF(cs.group_type_='MUSIC',mg.name_,NULL) music_group_name_,
-            cg.name_ class_group_name_,
-            CONCAT( class_date_, ' ', start_class_time_ ) start_class_time_,
-            ch.expiry_date_,
-            sch.remark_,
-            sch.status_,
-            sch.is_replied_
+        sch.id_,
+        ch.*,
+        IF(cs.group_type_='MUSIC',mg.name_,NULL) music_group_name_,
+        cg.name_ class_group_name_,
+        CONCAT( class_date_, ' ', start_class_time_ ) start_class_time_,
+        ch.expiry_date_,
+        sch.remark_,
+        sch.status_,
+        sch.is_replied_
         FROM student_course_homework sch
-            LEFT JOIN course_homework ch ON sch.course_homework_id_=ch.id_
-            LEFT JOIN course_schedule cs ON ch.course_schedule_id_=cs.id_
-            LEFT JOIN music_group mg ON ch.music_group_id_=mg.id_
-            LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
-            <include refid="queryCondition"/>
+        LEFT JOIN course_homework ch ON sch.course_homework_id_=ch.id_
+        LEFT JOIN course_schedule cs ON ch.course_schedule_id_=cs.id_
+        LEFT JOIN music_group mg ON ch.music_group_id_=mg.id_
+        LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
+        <include refid="queryCondition"/>
         ORDER BY CONCAT( class_date_, ' ', start_class_time_ ) DESC
         <include refid="global.limit"/>
     </select>
@@ -203,86 +209,83 @@
         <include refid="queryCondition"/>
     </select>
     <select id="findCourseHomeworkStudentDetail" resultMap="CourseHomeworkStudentDetailDto">
-		SELECT
-			mg.name_ musicGroupName,
-			cg.name_ classGroupName,
-			ch.id_ courseHomeworkId,
-			ch.content_,
-			ch.expiry_date_,
-			ch.completed_num_,
-			ch.expect_num_,
-			ch.expiry_date_,
-			sch.id_ studentCourseHomeworkId,
-			sch.attachments_,
-			sch.score_,
-			sch.status_,
-			sch.is_replied_,
-			sch.course_schedule_id_
-		FROM
-			course_homework ch
-		LEFT JOIN student_course_homework sch ON ch.id_=sch.course_homework_id_
-		LEFT JOIN music_group mg ON ch.music_group_id_=mg.id_
-		LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
-		WHERE ch.course_schedule_id_=#{courseScheduleID} AND sch.user_id_=#{userID}
-	</select>
+        SELECT mg.name_ musicGroupName,
+               cg.name_ classGroupName,
+               ch.id_   courseHomeworkId,
+               ch.content_,
+               ch.expiry_date_,
+               ch.completed_num_,
+               ch.expect_num_,
+               ch.expiry_date_,
+               sch.id_  studentCourseHomeworkId,
+               sch.attachments_,
+               sch.score_,
+               sch.status_,
+               sch.is_replied_,
+               sch.course_schedule_id_
+        FROM course_homework ch
+                 LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+                 LEFT JOIN music_group mg ON ch.music_group_id_ = mg.id_
+                 LEFT JOIN class_group cg ON ch.class_group_id_ = cg.id_
+        WHERE ch.course_schedule_id_ = #{courseScheduleID}
+          AND sch.user_id_ = #{userID}
+    </select>
     <select id="constructInitialStudentHomeworkRecords" resultMap="StudentCourseHomework">
-		SELECT
-			#{courseHomeworkID} course_homework_id_,
-			sa.user_id_,
-			0 status_,
-			0 is_replied_
-		FROM
-			student_attendance sa
-		WHERE
-			sa.course_schedule_id_ = #{courseScheduleID}
-			AND status_ = "NORMAL"
-	</select>
-	<select id="constructInitialStudentHomeworkRecordsWithPayment" resultMap="StudentCourseHomework">
-		SELECT
-			#{courseHomeworkID} course_homework_id_,
-			#{courseScheduleID} course_schedule_id_,
-			sa.user_id_,
-			0 status_,
-			0 is_replied_,
-			0 is_replied_timely_
-		FROM
-			course_schedule_student_payment sa
-		WHERE
-			sa.course_schedule_id_ = #{courseScheduleID}
-	</select>
-	<select id="findByCourseSchedule" resultMap="StudentCourseHomework">
-		SELECT
-			sch.*,
-			su.username_,
-			su.avatar_
-		FROM
-			student_course_homework sch
-			LEFT JOIN sys_user su ON sch.user_id_=su.id_
-			<where>
-				sch.course_schedule_id_=#{courseScheduleId}
-				<if test="userName!=null and userName!=''">
-					AND su.username_ LIKE CONCAT('%',#{userName},'%')
-				</if>
-			</where>
-	</select>
-	<select id="findByStudentAndCourseHomewok" resultMap="StudentCourseHomework">
-		SELECT * FROM student_course_homework WHERE user_id_=#{userId} AND course_homework_id_=#{courseHomeworkId}
-	</select>
-
-    <select id="queryNotDoneHomeworkList" resultMap="StudentCourseHomeworkFull">
+        SELECT #{courseHomeworkID} course_homework_id_,
+               sa.user_id_,
+               0                   status_,
+               0                   is_replied_
+        FROM student_attendance sa
+        WHERE sa.course_schedule_id_ = #{courseScheduleID}
+          AND status_ = "NORMAL"
+    </select>
+    <select id="constructInitialStudentHomeworkRecordsWithPayment" resultMap="StudentCourseHomework">
+        SELECT #{courseHomeworkID} course_homework_id_,
+               #{courseScheduleID} course_schedule_id_,
+               sa.user_id_,
+               0                   status_,
+               0                   is_replied_,
+               0                   is_replied_timely_
+        FROM course_schedule_student_payment sa
+        WHERE sa.course_schedule_id_ = #{courseScheduleID}
+    </select>
+    <select id="findByCourseSchedule" resultMap="StudentCourseHomework">
         SELECT
-        sch.*, cg.name_ classGroupName,
-        mg.name_ musicGroupName
+        sch.*,
+        su.username_,
+        su.avatar_
         FROM
         student_course_homework sch
-        LEFT JOIN course_homework ch ON sch.course_homework_id_ = ch.id_
-        LEFT JOIN music_group mg ON ch.music_group_id_ = mg.id_
-        LEFT JOIN class_group cg ON ch.class_group_id_ = cg.id_
-        WHERE
-        sch.status_ = 0 AND datediff(NOW(),sch.create_time_) &lt; 8
-	</select>
+        LEFT JOIN sys_user su ON sch.user_id_=su.id_
+        <where>
+            sch.course_schedule_id_=#{courseScheduleId}
+            <if test="userName!=null and userName!=''">
+                AND su.username_ LIKE CONCAT('%',#{userName},'%')
+            </if>
+        </where>
+    </select>
+    <select id="findByStudentAndCourseHomewok" resultMap="StudentCourseHomework">
+        SELECT *
+        FROM student_course_homework
+        WHERE user_id_ = #{userId}
+          AND course_homework_id_ = #{courseHomeworkId}
+    </select>
+
+    <select id="queryNotDoneHomeworkList" resultMap="StudentCourseHomeworkFull">
+        SELECT sch.*,
+               cg.name_ classGroupName,
+               mg.name_ musicGroupName
+        FROM student_course_homework sch
+                 LEFT JOIN course_homework ch ON sch.course_homework_id_ = ch.id_
+                 LEFT JOIN music_group mg ON ch.music_group_id_ = mg.id_
+                 LEFT JOIN class_group cg ON ch.class_group_id_ = cg.id_
+        WHERE sch.status_ = 0
+          AND datediff(NOW(), sch.create_time_) &lt; 8
+    </select>
     <select id="countStudentCourseHomeworks" resultType="java.lang.Integer">
-        SELECT COUNT(id_) FROM course_schedule_student_payment WHERE course_schedule_id_ = #{search}
+        SELECT COUNT(id_)
+        FROM course_schedule_student_payment
+        WHERE course_schedule_id_ = #{search}
     </select>
     <resultMap id="StudentCourseHomeworkDtoMap" type="com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto">
         <result column="student_course_homework_id_" property="studentCourseHomeworkId"/>
@@ -299,7 +302,8 @@
         SELECT sch.id_ student_course_homework_id_,sch.attachments_,sch.is_replied_,sch.is_view_,
         sch.update_time_,cssp.user_id_,su.username_,su.phone_,s.name_ subject_name_
         FROM course_schedule_student_payment cssp
-        LEFT JOIN student_course_homework sch ON sch.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sch.user_id_ AND sch.status_ = 1
+        LEFT JOIN student_course_homework sch ON sch.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ =
+        sch.user_id_ AND sch.status_ = 1
         LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
         LEFT JOIN student_registration sr ON cssp.music_group_id_ = sr.music_group_id_ AND cssp.user_id_ = sr.user_id_
         LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
@@ -318,28 +322,26 @@
     </resultMap>
     <select id="findStudentHomeworkRecord" resultMap="StudentHomeworkRecordDto">
         SELECT
-            sch.id_ student_course_homework_id_,
-            sch.course_schedule_id_,
-            cs.name_ course_name_,
-            CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
-            cs.actual_teacher_id_,
-            sch.status_
+        sch.id_ student_course_homework_id_,
+        sch.course_schedule_id_,
+        cs.name_ course_name_,
+        CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+        cs.actual_teacher_id_,
+        sch.status_
         FROM
-            student_course_homework sch
-            LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
+        student_course_homework sch
+        LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
         WHERE sch.user_id_=#{userId}
         AND DATE_FORMAT(class_date_, '%Y-%m')=DATE_FORMAT(#{classDate}, '%Y-%m')
         ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC
         <include refid="global.limit"/>
     </select>
     <select id="countStudentHomeworkRecord" resultType="int">
-        SELECT
-            COUNT(sch.id_)
-        FROM
-            student_course_homework sch
-            LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
-        WHERE sch.user_id_=#{userId}
-        AND DATE_FORMAT(class_date_, '%Y-%m')=DATE_FORMAT(#{classDate}, '%Y-%m')
+        SELECT COUNT(sch.id_)
+        FROM student_course_homework sch
+                 LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
+        WHERE sch.user_id_ = #{userId}
+          AND DATE_FORMAT(class_date_, '%Y-%m') = DATE_FORMAT(#{classDate}, '%Y-%m')
     </select>
     <select id="findByCourses" resultMap="StudentCourseHomework">
         SELECT * FROM student_course_homework WHERE course_schedule_id_ IN
@@ -348,38 +350,39 @@
         </foreach>
     </select>
 
-    <resultMap id="StudentServeCourseHomeworkDto" type="com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto" extends="StudentCourseHomework">
+    <resultMap id="StudentServeCourseHomeworkDto" type="com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto"
+               extends="StudentCourseHomework">
         <result property="courseStartTime" column="course_start_time_"/>
         <result property="homeworkCreateTime" column="homework_create_time_"/>
     </resultMap>
     <select id="findStudentHomeworkWithCourseDateRange" resultMap="StudentServeCourseHomeworkDto">
         SELECT
-            sch.*,
-            DATE_FORMAT(sch.create_time_, '%Y-%m-%d') homework_create_time_,
-            cs.class_date_ course_start_time_
+        sch.*,
+        DATE_FORMAT(sch.create_time_, '%Y-%m-%d') homework_create_time_,
+        cs.class_date_ course_start_time_
         FROM
-            student_course_homework sch
-            LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
+        student_course_homework sch
+        LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
         WHERE
-            cs.class_date_ BETWEEN #{startDate} AND #{endDate}
-            AND sch.user_id_ IN
-            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
-                #{studentId}
-            </foreach>
+        cs.class_date_ BETWEEN #{startDate} AND #{endDate}
+        AND sch.user_id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
     </select>
     <select id="checkStudentHaveHomeworkInDateRange" resultType="java.lang.Integer">
         SELECT
-            DISTINCT sch.user_id_
+        DISTINCT sch.user_id_
         FROM
-            student_course_homework sch
-            LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
+        student_course_homework sch
+        LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
         WHERE
-            cs.class_date_ BETWEEN #{startDate}
-            AND #{endDate}
-            AND sch.user_id_ IN
-            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
-                #{studentId}
-            </foreach>
+        cs.class_date_ BETWEEN #{startDate}
+        AND #{endDate}
+        AND sch.user_id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
     </select>
     <select id="queryReplied" resultType="java.util.Map">
         SELECT sch.course_homework_id_ AS 'key',COUNT(0) AS 'value'
@@ -395,35 +398,37 @@
     <sql id="queryAllCondition">
         <where>
             <if test="courseScheduleId!=null">
-               AND course_schedule_id_=#{courseScheduleId}
+                AND course_schedule_id_=#{courseScheduleId}
             </if>
             <if test="isReplied!=null">
-               AND is_replied_=#{isReplied}
+                AND is_replied_=#{isReplied}
             </if>
         </where>
     </sql>
 
     <select id="queryAll" resultMap="StudentCourseHomework">
-         SELECT * FROM student_course_homework
-         <include refid="queryAllCondition" />
-         ORDER BY id_
-         <include refid="global.limit"></include>
+        SELECT * FROM student_course_homework
+        <include refid="queryAllCondition"/>
+        ORDER BY id_
+        <include refid="global.limit"></include>
     </select>
     <select id="countAll" resultType="int">
         SELECT COUNT(*) FROM student_course_homework
-        <include refid="queryAllCondition" />
+        <include refid="queryAllCondition"/>
     </select>
 
     <delete id="delByCourseScheduleId">
-		DELETE FROM student_course_homework WHERE course_schedule_id_ = #{courseScheduleId}
-	</delete>
+        DELETE
+        FROM student_course_homework
+        WHERE course_schedule_id_ = #{courseScheduleId}
+    </delete>
 
     <delete id="batchDelByCourseScheduleId">
-		DELETE FROM student_course_homework WHERE course_schedule_id_ IN
-		<foreach collection="courseScheduleIdList" item="courseScheduleId" open="(" close=")" separator=",">
-			#{courseScheduleId}
-		</foreach>
-	</delete>
+        DELETE FROM student_course_homework WHERE course_schedule_id_ IN
+        <foreach collection="courseScheduleIdList" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+    </delete>
 
     <resultMap id="StudentVisitCourseHomeWorkDto" type="com.ym.mec.biz.dal.dto.StudentVisitCourseHomeWorkDto">
         <result column="groupType" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
@@ -438,15 +443,15 @@
     </resultMap>
     <select id="getStudentCourseHomeWorks" resultMap="StudentVisitCourseHomeWorkDto">
         SELECT sch.course_schedule_id_ courseScheduleId,
-        cs.group_type_          groupType,
-        cs.music_group_id_      groupId,
-        cs.name_                courseName,
-        sch.create_time_        createTime,
-        t.real_name_            teacherName,
-        ch.content_             content,
-        sch.status_             status,
-        sch.is_replied_         isReplied,
-        sch.is_view_            isView
+        cs.group_type_ groupType,
+        cs.music_group_id_ groupId,
+        cs.name_ courseName,
+        sch.create_time_ createTime,
+        t.real_name_ teacherName,
+        ch.content_ content,
+        sch.status_ status,
+        sch.is_replied_ isReplied,
+        sch.is_view_ isView
         FROM student_course_homework sch
         LEFT JOIN course_homework ch ON ch.id_ = sch.course_homework_id_
         LEFT JOIN course_schedule cs ON cs.id_ = sch.course_schedule_id_
@@ -475,8 +480,8 @@
             <if test="startTime != null">
                 AND sch.create_time_ >=#{startTime}
             </if>
-            <if test="startTime != null">
-                <![CDATA[   AND sch.create_time_<=#{startTime}
+            <if test="endTime != null">
+                <![CDATA[AND sch.create_time_<=#{endTime}
             ]]></if>
         </where>
     </sql>

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

@@ -182,15 +182,14 @@
         </foreach>
     </select>
     <select id="getTeacherVisitCount" resultType="com.ym.mec.biz.dal.dto.TeacherVisitDto">
-        SELECT organ_id_ organId, teacher_id_ teacherId,date_format(visit_time_, '%Y-%m') month, COUNT(*) num
+        SELECT teacher_id_ teacherId,date_format(visit_time_, '%Y-%m') month, COUNT(*) num
         FROM student_visit
         WHERE teacher_id_ IN
         <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
             #{teacherId}
         </foreach>
         AND visit_time_ >= #{startTime}
-        <![CDATA[AND visit_time_ <= #{endTime}
-        ]]>
-        GROUP BY organ_id_, teacher_id_,date_format(visit_time_, '%Y-%m')
+        <![CDATA[ AND visit_time_ <= #{endTime} ]]>
+        GROUP BY teacher_id_,date_format(visit_time_, '%Y-%m')
     </select>
 </mapper>

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

@@ -12,6 +12,7 @@
 		<result column="url_" property="url" />
 		<result column="memo_" property="memo" />
 		<result column="create_time_" property="createTime" />
+		<result column="version_" property="version" />
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -32,8 +33,8 @@
 		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO sys_user_contracts
-		(id_,user_id_,contract_no_,type_,url_,memo_,create_time_)
-		VALUES(#{id},#{userId},#{contractNo},#{type},#{url},#{memo},#{createTime})
+		(id_,user_id_,contract_no_,type_,url_,memo_,create_time_,version_)
+		VALUES(#{id},#{userId},#{contractNo},#{type},#{url},#{memo},#{createTime},#{version})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -85,7 +86,7 @@
 	</select>
 
 	<select id="getUserContractWithType" resultMap="SysUserContracts">
-		SELECT * FROM sys_user_contracts WHERE user_id_=#{userId} AND type_=#{contractType}
+		SELECT * FROM sys_user_contracts WHERE user_id_=#{userId} AND type_=#{contractType} AND version_=#{version}
 	</select>
 
 	<select id="getLatestUserContract" resultMap="SysUserContracts">

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

@@ -96,9 +96,6 @@
 			<if test="vipGroupCategoryIdList != null">
 			vip_group_category_id_list_ = #{vipGroupCategoryIdList},
 			</if>
-			<if test="updateTime != null">
-			update_time_ = NOW(),
-			</if>
 			<if test="description != null">
 			description_ = #{description},
 			</if>
@@ -123,6 +120,7 @@
 			<if test="offlineClassJoinGradientRewards!=null">
 				offline_class_join_gradient_rewards_=#{offlineClassJoinGradientRewards},
 			</if>
+			update_time_ = NOW(),
 			</set> WHERE id_ = #{id}
 	</update>
 

+ 26 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -83,6 +83,10 @@ public class StudentOrderController extends BaseController {
     private DegreeRegistrationDao degreeRegistrationDao;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
+    @Autowired
+    private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
 
 
     @Value("${spring.profiles.active:dev}")
@@ -143,6 +147,15 @@ public class StudentOrderController extends BaseController {
             orderDetail.put("course", musicGroup.getCourseForm());
             orderDetail.put("ownershipType", musicGroup.getOwnershipType());
             orderDetail.put("detailType", orderDetailType);
+            orderDetail.put("chargeTypeId", musicGroup.getChargeTypeId());
+
+            //新的课程形态10.27
+            MusicGroupPaymentCalender musicGroupRegCalender = musicGroupPaymentCalenderDao.getMusicGroupRegCalender(musicGroup.getId());
+            if (musicGroupRegCalender != null) {
+                List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.getMusicGroupRegCalenderCourseSettings(musicGroup.getId());
+                musicGroupRegCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettings);
+            }
+            orderDetail.put("calender", musicGroupRegCalender);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP)) {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
@@ -332,7 +345,7 @@ public class StudentOrderController extends BaseController {
 
         String[] statusArr = {"0", "1", "7"};
         for (StudentPaymentOrder payingOrder : payingOrders) {
-            if(StringUtils.isNotBlank(orderNo)&&!orderNo.equals(payingOrder.getOrderNo())){
+            if (StringUtils.isNotBlank(orderNo) && !orderNo.equals(payingOrder.getOrderNo())) {
                 continue;
             }
             Map<String, String> rpMap = new HashMap<>();
@@ -773,5 +786,17 @@ public class StudentOrderController extends BaseController {
         return succeed(studentPaymentOrderService.reConfirmOrder(startTime, endTime));
     }
 
+    @GetMapping("/getMusicGroupApplyCalender")
+    public HttpResponseResult<MusicGroupPaymentCalender> getMusicGroupApplyCalender(String musicGroupId){
+        MusicGroupPaymentCalender musicGroupRegCalender = musicGroupPaymentCalenderDao.getMusicGroupRegCalender(musicGroupId);
+        if (musicGroupRegCalender != null) {
+            MusicGroup musicGroup = musicGroupService.get(musicGroupId);
+            musicGroupRegCalender.setChargeTypeId(musicGroup.getChargeTypeId());
+            List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.getMusicGroupRegCalenderCourseSettings(musicGroupId);
+            musicGroupRegCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettings);
+        }
+        return succeed(musicGroupRegCalender);
+    }
+
 
 }

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

@@ -24,6 +24,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -178,6 +179,7 @@ public class TeacherCourseScheduleController extends BaseController {
 
     @ApiOperation(value = "课时调整")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @AuditLogAnnotation(operateName = "课时调整")
     public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
         if(Objects.isNull(classDateAdjustDto.getId())){
             return failed("请指定课程!");
@@ -193,6 +195,9 @@ public class TeacherCourseScheduleController extends BaseController {
         	return failed("客户端只能调整VIP课");
         }
         Date now = new Date();
+        if(now.compareTo(oldCourseSchedule.getStartClassTime())>0){
+            throw new BizException("进行中或已结束课程不可调整");
+        }
         
         //默认开课前4小时内,可调整,如果全员请假,可在当天24小时前调整
         SysConfig advanceLeaveHoursConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_TEACHER_COURSE_ADJUST_DEFAULT_HOURS);
@@ -331,6 +336,7 @@ public class TeacherCourseScheduleController extends BaseController {
 
     @ApiOperation(value = "课程批量调整")
     @PostMapping("/courseAdjustOnlyWithClassDate")
+    @AuditLogAnnotation(operateName = "课程批量调整")
     public HttpResponseResult courseAdjustOnlyWithClassDate(@RequestBody List<CourseSchedule> courseSchedules){
         SysUser user = sysUserFeignService.queryUserInfo();
         if(null==user){

+ 3 - 0
mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemController.java

@@ -11,6 +11,7 @@ import com.ym.mec.biz.service.InspectionItemService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -72,6 +73,8 @@ public class InspectionItemController extends BaseController {
         if (!userRole.contains(SysUserRole.SECTION_MANAGER) && !sysUser.getIsSuperAdmin()) {
             queryInfo.setUserId(sysUser.getId());
         }
+        String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -2)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        queryInfo.setSearchStartTime(startTime);
         return succeed(inspectionItemService.getPageList(queryInfo));
     }
 }

+ 2 - 0
mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemPlanController.java

@@ -94,6 +94,8 @@ public class InspectionItemPlanController extends BaseController {
         if (queryInfo.getItemId() != null) {
             queryInfo.setUserId(sysUser.getId());
         }
+        String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -2)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        queryInfo.setSearchStartTime(startTime);
         return succeed(inspectionItemPlanService.queryPage(queryInfo));
     }