Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into 新增ios配置

 Conflicts:
	mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java
	mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java
	mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java
	mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java
zouxuan 3 years ago
parent
commit
afaa935b4b
49 changed files with 1967 additions and 1358 deletions
  1. 4 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  2. 29 26
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  5. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  6. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  7. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportStudentSubCourse.java
  8. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  9. 86 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeDto.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java
  11. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  12. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSubTotalCourseTimesQueryInfo.java
  14. 18 5
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  15. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  16. 239 198
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  17. 22 38
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  19. 111 105
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  20. 27 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  21. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  22. 5 4
      mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml
  23. 6 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 13 1
      mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml
  25. 31 13
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  26. 989 792
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  27. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  28. 12 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  29. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  30. 6 6
      mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml
  31. 6 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  32. 5 1
      mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java
  33. 1 0
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  34. 5 42
      mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java
  35. 8 12
      mec-student/src/main/java/com/ym/mec/student/controller/StudentController.java
  36. 6 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseReviewController.java
  37. 6 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  38. 25 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudentController.java
  39. 23 76
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  40. 12 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java
  41. 18 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java
  42. 6 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java
  43. 14 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java
  44. 83 0
      mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java
  45. 3 6
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  46. 18 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java
  47. 14 6
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentStudentController.java
  48. 15 1
      mec-web/src/main/resources/columnMapper.ini
  49. 9 1
      mec-web/src/main/resources/exportColumnMapper.ini

+ 4 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -78,10 +78,10 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 				throw new LockedException("用户不存在");
 			}
 			//如果机构不一致,不允许跨机构注册
-			if(loginEntity.getTenantId() != null && loginEntity.getTenantId() != 0 &&
-					!loginEntity.getTenantId().equals(user.getTenantId())){
-				throw new LockedException("用户已注册");
-			}
+//			if(loginEntity.getTenantId() != null && loginEntity.getTenantId() != 0 &&
+//					!loginEntity.getTenantId().equals(user.getTenantId())){
+//				throw new LockedException("用户已注册");
+//			}
 			if (StringUtils.isNotBlank(deviceNum)) {
 				sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum, userInfo.getSysUser().getTenantId());
 			}

+ 29 - 26
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -1,47 +1,38 @@
 package com.ym.mec.auth.web.controller;
 
-import com.ym.mec.auth.service.TenantInfoService;
-import com.ym.mec.common.page.QueryInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-import java.util.Date;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.service.SysRoleService;
 import com.ym.mec.auth.service.SysUserRoleService;
 import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.auth.service.TenantInfoService;
 import com.ym.mec.auth.web.controller.queryInfo.SysUserQueryInfo;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.security.AuthUser;
 import com.ym.mec.common.security.SecurityConstants;
 import com.ym.mec.common.security.SecurityUtils;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.im.ImFeignService;
-import com.ym.mec.thirdparty.eseal.ESealPlugin;
 import com.ym.mec.thirdparty.user.realname.RealnameAuthenticationPluginContext;
 import com.ym.mec.thirdparty.user.realname.provider.LinkfaceRealnameAuthenticationPlugin;
 import com.ym.mec.util.date.DateUtil;
-import com.ym.mec.web.WebFeignService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
 
 @RestController()
 @RequestMapping("user")
@@ -59,8 +50,6 @@ public class UserController extends BaseController {
 	@Autowired
 	private IdGeneratorService smsCodeService;
 	@Autowired
-	private WebFeignService webFeignService;
-	@Autowired
 	private TenantInfoService tenantInfoService;
 	@Value("${message.debugMode}")
 	private boolean debugMode;
@@ -364,4 +353,18 @@ public class UserController extends BaseController {
     public Object queryClientByPhone(String phone) {
         return succeed(sysUserService.queryClientByPhone(phone));
     }
+
+	@ApiOperation(value = "用户注销")
+	@PostMapping(value = "/destroy")
+	public Object destroy() {
+		AuthUser user = SecurityUtils.getUser();
+		if (user != null) {
+			SysUser sysUser = sysUserService.get(user.getUserId());
+			sysUser.setPhone("Z" + sysUser.getPhone());
+			sysUser.setUpdateTime(new Date());
+			sysUserService.update(sysUser);
+			return succeed();
+		}
+		return failed("请登录");
+	}
 }

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

@@ -422,4 +422,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     int countStudentBasicInfo(Map<String, Object> params);
 
     List<SysUserDto> queryStudentBasicInfo(Map<String, Object> params);
+
+    List<BaseMapDto> queryStuSubjectId(@Param("organIds") String organIds);
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
+import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
@@ -150,8 +151,16 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                          @Param("courseId") Long courseId);
 
     List<TeacherServeDto> queryTeacherServeInfo(Map<String, Object> params);
+
     int countTeacherServeInfo(Map<String, Object> params);
 
+    /**
+     * 查询学生指标
+     * @param params
+     * @return
+     */
+    List<StudentServeDto> queryStudentServeInfo(@Param("params") Map<String, Object> params);
+
     List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
                                                                             @Param("sunday") String sunday,
                                                                             @Param("teacherIds") List<Integer> teacherIds,
@@ -190,4 +199,7 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                    @Param("serveType") String serveType,
                                                                    @Param("month") Date month,
                                                                    @Param("userId") Integer userId);
+
+
+
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -529,4 +529,13 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      *              <p>  search 模糊搜索
      */
     <T> IPage<T> getStudentsByTeacherOrgan(Page<T> page, @Param("param") Map<String, Object> param);
+
+    /**
+    * @description: 获取老师分部列表
+     * @param userId
+    * @return java.util.List<com.ym.mec.biz.dal.dto.BaseMapDto<java.lang.Integer,java.lang.String>>
+    * @author zx
+    * @date 2022/7/15 15:43
+    */
+    List<BaseMapDto<Integer, String>> queryOrganList(@Param("userId") Integer userId);
 }

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

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.PracticeGroup;
 import com.ym.mec.biz.dal.enums.SignInStatusEnum;
 import com.ym.mec.biz.dal.enums.SignOutStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
 
@@ -57,6 +58,9 @@ public class CourseScheduleEndDto extends CourseSchedule {
     /** 合作单位 */
     private String cooperationOrgan;
 
+    @ApiModelProperty(value = "被合并的课程ids,多个,分割")
+    private String mergedCourseIds;
+
     public Date getGenerateTime() {
         return generateTime;
     }
@@ -224,4 +228,12 @@ public class CourseScheduleEndDto extends CourseSchedule {
     public void setCooperationOrgan(String cooperationOrgan) {
         this.cooperationOrgan = cooperationOrgan;
     }
+
+    public String getMergedCourseIds() {
+        return mergedCourseIds;
+    }
+
+    public void setMergedCourseIds(String mergedCourseIds) {
+        this.mergedCourseIds = mergedCourseIds;
+    }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportStudentSubCourse.java

@@ -25,6 +25,10 @@ public class ExportStudentSubCourse {
      * 剩余排课资格
      */
     private Integer subCourseNum;
+    /**
+     * 剩余赠送排课资格
+     */
+    private Integer subGiveCourseNum;
 
     public Integer getUserId() {
         return userId;
@@ -73,4 +77,12 @@ public class ExportStudentSubCourse {
     public void setSubCourseNum(Integer subCourseNum) {
         this.subCourseNum = subCourseNum;
     }
+
+    public Integer getSubGiveCourseNum() {
+        return subGiveCourseNum;
+    }
+
+    public void setSubGiveCourseNum(Integer subGiveCourseNum) {
+        this.subGiveCourseNum = subGiveCourseNum;
+    }
 }

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -21,6 +21,9 @@ public class StudentManageListDto {
     @ApiModelProperty(value = "用户名",required = false)
     private String realName;
 
+    @ApiModelProperty(value = "用户头像",required = false)
+    private String avatar;
+
     @ApiModelProperty(value = "用户名",required = false)
     private String username;
 
@@ -121,7 +124,15 @@ public class StudentManageListDto {
     private Integer recordUserId;
 	
 	private String extSubjectIds;
-	
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
     public Integer getRecordUserId() {
         return recordUserId;
     }

+ 86 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeDto.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 
 /**
@@ -18,6 +20,22 @@ public class StudentServeDto extends Student {
 
     private Date courseStartTime;
 
+    private String musicGroupName;
+
+    private String servePeriod;
+
+    private String serveNum;
+
+    private Integer actualExercisesNum;
+
+    private Integer exercisesReplyNum;
+
+    private Integer exercisesMessageNum;
+
+    private BigDecimal signRate;
+
+    private BigDecimal passRate;
+
     public GroupType getGroupType() {
         return groupType;
     }
@@ -41,4 +59,72 @@ public class StudentServeDto extends Student {
     public void setCourseStartTime(Date courseStartTime) {
         this.courseStartTime = courseStartTime;
     }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getServePeriod() {
+        return servePeriod;
+    }
+
+    public void setServePeriod(String servePeriod) {
+        this.servePeriod = servePeriod;
+    }
+
+    public String getServeNum() {
+        return serveNum;
+    }
+
+    public void setServeNum(String serveNum) {
+        this.serveNum = serveNum;
+    }
+
+    public Integer getActualExercisesNum() {
+        return actualExercisesNum;
+    }
+
+    public void setActualExercisesNum(Integer actualExercisesNum) {
+        this.actualExercisesNum = actualExercisesNum;
+    }
+
+    public Integer getExercisesReplyNum() {
+        return exercisesReplyNum;
+    }
+
+    public void setExercisesReplyNum(Integer exercisesReplyNum) {
+        this.exercisesReplyNum = exercisesReplyNum;
+    }
+
+    public Integer getExercisesMessageNum() {
+        return exercisesMessageNum;
+    }
+
+    public void setExercisesMessageNum(Integer exercisesMessageNum) {
+        this.exercisesMessageNum = exercisesMessageNum;
+    }
+
+    public BigDecimal getSignRate() {
+        return signRate;
+    }
+
+    public void setSignRate(BigDecimal signRate) {
+        if (null != signRate) {
+            this.signRate = signRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    public BigDecimal getPassRate() {
+        return passRate;
+    }
+
+    public void setPassRate(BigDecimal passRate) {
+        if (null != passRate) {
+            this.passRate = passRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
 }

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

@@ -91,7 +91,7 @@ public class StudentRegistration extends BaseEntity {
     @ApiModelProperty(value = "生日", required = false)
     private Date birthdate;
 
-    @ApiModelProperty(value = "缴费状态(1-已缴费 0-未交费)", required = false)
+    @ApiModelProperty(value = "缴费状态(2-已缴费 1-开启缴费 0-未交费)", required = false)
     private PaymentStatusEnum paymentStatus;
 
     @ApiModelProperty(value = "用户所在乐团状态)",required = false)

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

@@ -75,6 +75,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     VIP_STUDENT_COURSE_MANAGE("VIP_STUDENT_COURSE_MANAGE", "vip学员课程管理"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出"),
     EXPORT_STUDENT_SUBCOURSE("EXPORT_STUDENT_SUBCOURSE", "活动资格导出"),
+    EXPORT_STUDENT_SERVE_INFO("EXPORT_STUDENT_SERVE_INFO", "乐团学生服务指标导出"),
     ;
 
     private String code;

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -14,7 +14,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER_LIST_SUM(8, "订单汇总"),
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
-	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出");
+	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出"),
+	EXPORT_STUDENT_SERVE_INFO(12, "乐团学生服务指标导出");
+	;
 
 	private Integer code;
 

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

@@ -10,6 +10,8 @@ public class StudentSubTotalCourseTimesQueryInfo extends QueryInfo {
     private Boolean hastimer;
     @ApiModelProperty(value = "班级类型")
     private String courseType;
+    @ApiModelProperty(value = "班级id")
+    private String classGroupId;
 
     public String getMusicGroupId() {
         return musicGroupId;
@@ -34,4 +36,12 @@ public class StudentSubTotalCourseTimesQueryInfo extends QueryInfo {
     public void setCourseType(String courseType) {
         this.courseType = courseType;
     }
+
+    public String getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(String classGroupId) {
+        this.classGroupId = classGroupId;
+    }
 }

+ 18 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -7,15 +7,12 @@ import java.util.Map;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.BaseStudentDto;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface StudentService extends BaseService<Integer, Student> {
@@ -167,4 +164,20 @@ public interface StudentService extends BaseService<Integer, Student> {
     <T extends BaseStudentDto> SysUser upSetStudent(T student);
 
     PageInfo<SysUserDto> queryStudentBasicInfo(UserBasicQueryInfo queryInfo);
+
+    /**
+     * 获取和当前指导老师关联的学员
+     *
+     * @return
+     */
+    PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
+
+    /**
+    * @description: 获取分部学员声部列表
+     * @param organIds
+    * @return java.util.List<com.ym.mec.biz.dal.entity.Subject>
+    * @author zx
+    * @date 2022/7/19 15:21
+    */
+    List<BaseMapDto> queryStuSubjectId(String organIds);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -251,4 +251,13 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      *              <p> -rows 每页数量
      */
     PageInfo<BasicUserDto> getStudentsByTeacherOrgan(Map<String, Object> param);
+
+    /**
+    * @description: 获取老师分部列表
+     * @param
+    * @return java.lang.Object
+    * @author zx
+    * @date 2022/7/15 15:31
+    */
+    List<BaseMapDto<Integer,String>> queryOrganList(Integer userId);
 }

File diff suppressed because it is too large
+ 239 - 198
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java


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

@@ -1,26 +1,9 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATION;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.service.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Organization;
@@ -30,10 +13,24 @@ import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATION;
 
 @Service
 public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organization> implements OrganizationService {
@@ -47,7 +44,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	@Autowired
 	private EmployeeDao employeeDao;
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	private SysUserService sysUserService;
 	@Autowired
 	private SysEmployeePositionService employeePositionService;
 	@Autowired
@@ -66,10 +63,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 
 	@Override
 	public List<Organization> queryEmployeeOrgan(){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(sysUser == null){
-			throw new BizException("获取用户信息失败");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		String organIds = this.getEmployeeOrgan(sysUser.getId(), "", sysUser.getIsSuperAdmin());
 		return organizationDao.queryEmployeeOrgan(organIds);
 	}
@@ -139,20 +133,13 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 
 	@Override
 	public String getEmployeeOrgan(Object organIds) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		return this.getEmployeeOrgan(sysUser.getId(),organIds == null?"":organIds.toString(),sysUser.getIsSuperAdmin());
 	}
 
 	@Override
 	public String getTeacherOrgan() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败");
-		}
-		Teacher teacher = teacherDao.get(sysUser.getId());
+		Teacher teacher = teacherDao.get(sysUserService.getUserId());
 		String organIds = teacher.getTeacherOrganId() + "";
 		if(StringUtils.isNotBlank(teacher.getFlowOrganRange())){
 			organIds = organIds + "," + teacher.getFlowOrganRange();
@@ -177,10 +164,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 
 	@Override
     public <T extends EducationBaseQueryInfo> T onlyEducation(T queryInfo) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		queryInfo.setOrganIds(this.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIds(),sysUser.getIsSuperAdmin()));
 		Boolean onlyForRole = employeePositionService.onlyForRole(EDUCATION, sysUser.getId(), sysUser.getIsSuperAdmin());
 		//如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
@@ -223,11 +207,11 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
     public Long add(Organization organization) {
 		long insert = organizationDao.insert(organization);
 		TenantInfo tenantInfo = tenantInfoDao.selectById(organization.getTenantId());
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(!sysUser.getId().equals(tenantInfo.getUserId())){
+		Integer userId = sysUserService.getUserId();
+		if(!userId.equals(tenantInfo.getUserId())){
 			updateOrganId(tenantInfo.getUserId(),organization.getId());
 		}
-		updateOrganId(sysUser.getId(),organization.getId());
+		updateOrganId(userId,organization.getId());
 		return insert;
     }
 

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

@@ -396,7 +396,7 @@ public class PayServiceImpl implements PayService {
             routeScaleDtos = noUsePaymentConfig(amount); //款项都收到平台商户
         }
 
-        //根据费用类型
+        //根据费用类型,mark
         if (routeScaleDtos == null) {
             routeScaleDtos = getTypeRouteChannel(organId, orderNo, amount, balanceAmount);
         }

+ 111 - 105
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -112,8 +112,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
 
-        String[] organIds = queryInfo.getOrganId().split(",");
-        params.put("organIds", organIds);
+        if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
+            String[] organIds = queryInfo.getOrganId().split(",");
+            params.put("organIds", organIds);
+        }
 
         List<StudentManageListDto> dataList = null;
         int count = studentManageDao.countStudentByOrganId(params);
@@ -144,10 +146,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         //用户协议
         List<SysUserContracts> userAllContract = sysUserContractsDao.getUserAllContract(new ArrayList<>(userIds));
         Map<Integer, Set<Integer>> userContractVersionMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(userAllContract)){
+        if (!CollectionUtils.isEmpty(userAllContract)) {
             userContractVersionMap = userAllContract.stream().collect(Collectors.groupingBy(SysUserContracts::getUserId, Collectors.mapping(SysUserContracts::getVersion, Collectors.toSet())));
         }
-        Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(userIds,null));
+        Map<Long, String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(userIds, null));
         //List<Subject> studentSubject = studentManageDao.getStudentSubject(userIds);
         StudentListCourseDto studentListCourseDto = null;
         //获取所在乐团
@@ -196,20 +198,20 @@ public class StudentManageServiceImpl implements StudentManageService {
                 dto.setHasPracticeCourse(YesOrNoEnum.NO);
             }
             //如果会员已过期、是否有未生效的会员
-            if(dto.getMemberRankSettingId() == null){
+            if (dto.getMemberRankSettingId() == null) {
                 String s = cloudMap.get(dto.getUserId().longValue());
-                if(StringUtils.isNotEmpty(s)){
+                if (StringUtils.isNotEmpty(s)) {
                     dto.setHasNoStartCloudTeacher(true);
                 }
             }
 
-            if(userContractVersionMap.containsKey(dto.getUserId())){
+            if (userContractVersionMap.containsKey(dto.getUserId())) {
                 dto.setIsSignedContract(true);
-            }else{
+            } else {
                 dto.setIsSignedContract(false);
             }
             //年级
-            dto.setCurrentGrade(studentService.getStudentGrade(dto.getGradeType(),dto.getCurrentGradeNum()));
+            dto.setCurrentGrade(studentService.getStudentGrade(dto.getGradeType(), dto.getCurrentGradeNum()));
         }
         pageInfo.setRows(dataList);
         return pageInfo;
@@ -253,6 +255,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
     @Override
     public PageInfo<SimpleUserDto> queryStudentsWithTeacherByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<SimpleUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
@@ -300,7 +303,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             dataList = studentPaymentOrderDao.queryDouble11Students(params);
             SysConfig vipSpecialActivityConfig = sysConfigService.findByParamName(SysConfigService.VIP_SPECIAL_ACTIVITY_IDS);
             Map<Integer, StudentVipDouble11Dto> studentCourseTimeMap = new HashMap<>();
-            if(Objects.nonNull(vipSpecialActivityConfig)&&StringUtils.isNotBlank(vipSpecialActivityConfig.getParanValue())){
+            if (Objects.nonNull(vipSpecialActivityConfig) && StringUtils.isNotBlank(vipSpecialActivityConfig.getParanValue())) {
                 Set<Integer> studentIds = dataList.stream().map(StudentVipDouble11Dto::getUserId).collect(Collectors.toSet());
                 Set<Integer> specialActivityIds = Arrays.stream(vipSpecialActivityConfig.getParanValue().split(",")).map(Integer::valueOf).collect(Collectors.toSet());
                 List<StudentVipDouble11Dto> studentCourseTimeList = courseScheduleStudentPaymentDao.countStudentDouble11CourseTime(new ArrayList<>(studentIds), new ArrayList<>(specialActivityIds));
@@ -308,12 +311,12 @@ public class StudentManageServiceImpl implements StudentManageService {
             }
             for (StudentVipDouble11Dto studentVipDouble11Dto : dataList) {
                 StudentVipDouble11Dto studentCourseTime = studentCourseTimeMap.get(studentVipDouble11Dto.getUserId());
-                studentVipDouble11Dto.setCourseOneToOneTime(studentVipDouble11Dto.getPaymentOneToOneTime()*20-(Objects.isNull(studentCourseTime)?0:studentCourseTime.getCourseOneToOneTime()));
-                if(studentVipDouble11Dto.getCourseOneToOneTime()<0){
+                studentVipDouble11Dto.setCourseOneToOneTime(studentVipDouble11Dto.getPaymentOneToOneTime() * 20 - (Objects.isNull(studentCourseTime) ? 0 : studentCourseTime.getCourseOneToOneTime()));
+                if (studentVipDouble11Dto.getCourseOneToOneTime() < 0) {
                     studentVipDouble11Dto.setCourseOneToOneTime(0);
                 }
-                studentVipDouble11Dto.setCourseOneToTwoTime(studentVipDouble11Dto.getPaymentOneToTwoTime()*20-(Objects.isNull(studentCourseTime)?0:studentCourseTime.getCourseOneToTwoTime()));
-                if(studentVipDouble11Dto.getCourseOneToTwoTime()<0){
+                studentVipDouble11Dto.setCourseOneToTwoTime(studentVipDouble11Dto.getPaymentOneToTwoTime() * 20 - (Objects.isNull(studentCourseTime) ? 0 : studentCourseTime.getCourseOneToTwoTime()));
+                if (studentVipDouble11Dto.getCourseOneToTwoTime() < 0) {
                     studentVipDouble11Dto.setCourseOneToTwoTime(0);
                 }
             }
@@ -328,19 +331,19 @@ public class StudentManageServiceImpl implements StudentManageService {
         List<StudentVipDouble11Dto> studentsDouble11Infos = studentPaymentOrderDao.findStudentsDouble11Infos(studentIds);
         SysConfig vipSpecialActivityConfig = sysConfigService.findByParamName(SysConfigService.VIP_SPECIAL_ACTIVITY_IDS);
         Map<Integer, StudentVipDouble11Dto> studentCourseTimeMap = new HashMap<>();
-        if(Objects.nonNull(vipSpecialActivityConfig)&&StringUtils.isNotBlank(vipSpecialActivityConfig.getParanValue())){
+        if (Objects.nonNull(vipSpecialActivityConfig) && StringUtils.isNotBlank(vipSpecialActivityConfig.getParanValue())) {
             Set<Integer> specialActivityIds = Arrays.stream(vipSpecialActivityConfig.getParanValue().split(",")).map(Integer::valueOf).collect(Collectors.toSet());
             List<StudentVipDouble11Dto> studentCourseTimeList = courseScheduleStudentPaymentDao.countStudentDouble11CourseTime(studentIds, new ArrayList<>(specialActivityIds));
             studentCourseTimeMap = studentCourseTimeList.stream().collect(Collectors.toMap(StudentVipDouble11Dto::getUserId, s -> s));
         }
         for (StudentVipDouble11Dto studentVipDouble11Dto : studentsDouble11Infos) {
             StudentVipDouble11Dto studentCourseTime = studentCourseTimeMap.get(studentVipDouble11Dto.getUserId());
-            studentVipDouble11Dto.setCourseOneToOneTime(studentVipDouble11Dto.getPaymentOneToOneTime()*20-(Objects.isNull(studentCourseTime)?0:studentCourseTime.getCourseOneToOneTime()));
-            if(studentVipDouble11Dto.getCourseOneToOneTime()<0){
+            studentVipDouble11Dto.setCourseOneToOneTime(studentVipDouble11Dto.getPaymentOneToOneTime() * 20 - (Objects.isNull(studentCourseTime) ? 0 : studentCourseTime.getCourseOneToOneTime()));
+            if (studentVipDouble11Dto.getCourseOneToOneTime() < 0) {
                 studentVipDouble11Dto.setCourseOneToOneTime(0);
             }
-            studentVipDouble11Dto.setCourseOneToTwoTime(studentVipDouble11Dto.getPaymentOneToTwoTime()*20-(Objects.isNull(studentCourseTime)?0:studentCourseTime.getCourseOneToTwoTime()));
-            if(studentVipDouble11Dto.getCourseOneToTwoTime()<0){
+            studentVipDouble11Dto.setCourseOneToTwoTime(studentVipDouble11Dto.getPaymentOneToTwoTime() * 20 - (Objects.isNull(studentCourseTime) ? 0 : studentCourseTime.getCourseOneToTwoTime()));
+            if (studentVipDouble11Dto.getCourseOneToTwoTime() < 0) {
                 studentVipDouble11Dto.setCourseOneToTwoTime(0);
             }
         }
@@ -486,31 +489,31 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         List<MusicGroupStudentsDto> dataList = new ArrayList<>();
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.getMusicGroupStu(queryInfo.getMusicGroupId());
-        if(studentRegistrations.size() == 0){
+        if (studentRegistrations.size() == 0) {
             return pageInfo;
         }
         List<Integer> userIds = studentRegistrations.stream().map(e -> e.getUserId()).collect(Collectors.toList());
-        if(queryInfo.getHasCourse() != null){
+        if (queryInfo.getHasCourse() != null) {
             //有剩余课程的学员
-            List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds,"VIP,PRACTICE");
-            if(queryInfo.getHasCourse()){
+            List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds, "VIP,PRACTICE");
+            if (queryInfo.getHasCourse()) {
                 userIds = hasCourseStudent;
-            }else {
+            } else {
                 userIds.removeAll(hasCourseStudent);
             }
         }
-        if(userIds.size() > 0 && queryInfo.getOweFlag() != null){
-            List<Integer> studentIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(queryInfo.getMusicGroupId(),userIds,null);
-            if(queryInfo.getOweFlag()){
+        if (userIds.size() > 0 && queryInfo.getOweFlag() != null) {
+            List<Integer> studentIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(queryInfo.getMusicGroupId(), userIds, null);
+            if (queryInfo.getOweFlag()) {
                 userIds = studentIds;
-            }else {
+            } else {
                 userIds.removeAll(studentIds);
             }
         }
-        if(userIds.size() == 0){
+        if (userIds.size() == 0) {
             return pageInfo;
         }
-        params.put("userIds",userIds);
+        params.put("userIds", userIds);
         int count = studentManageDao.countMusicGroupStudent(params);
         if (queryInfo.getIsExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
@@ -520,7 +523,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.queryMusicGroupStudent(params);
             //获取乐团学员欠费金额
-            Map<Integer,BigDecimal> totalAmountMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentTotalAmount(queryInfo.getMusicGroupId()));
+            Map<Integer, BigDecimal> totalAmountMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentTotalAmount(queryInfo.getMusicGroupId()));
             //退团的学生
             List<Integer> quitUserIds = dataList.stream().filter(e -> e.getStudentStatus().equals("QUIT")).map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
             if (quitUserIds.size() > 0) {
@@ -533,23 +536,23 @@ public class StudentManageServiceImpl implements StudentManageService {
                 }
             }
             List<Integer> collect = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
-            List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(collect,"VIP,PRACTICE");
+            List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(collect, "VIP,PRACTICE");
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
             //查询是否有有效期内乐保
-            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(collect,queryInfo.getMusicGroupId());
+            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(collect, queryInfo.getMusicGroupId());
             Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
 
             //查询云教练订单
             List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(collect, queryInfo.getMusicGroupId());
             Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             Date nowDate = new Date();
-            Map<Long,String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect),null));
-            dataList.forEach(e->{
+            Map<Long, String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect), null));
+            dataList.forEach(e -> {
                 //如果会员已过期、是否有未生效的会员
-                if(e.getMemberRankSettingId() == null){
+                if (e.getMemberRankSettingId() == null) {
                     String s = cloudMap.get(e.getUserId().longValue());
-                    if(StringUtils.isNotEmpty(s)){
+                    if (StringUtils.isNotEmpty(s)) {
                         e.setHasNoStartCloudTeacher(true);
                     }
                 }
@@ -558,16 +561,16 @@ public class StudentManageServiceImpl implements StudentManageService {
                 if (studentWaitPayChange.containsKey(e.getUserId())) {
                     e.setSubjectChange(studentWaitPayChange.get(e.getUserId()).get(0));
                 }
-                if(studentMaintenanceMap.containsKey(e.getUserId())){
+                if (studentMaintenanceMap.containsKey(e.getUserId())) {
                     e.setHasMaintenance(true);
                 }
                 if (studentCloudTeacherMap.containsKey(e.getUserId())) {
                     List<CloudTeacherOrder> cloudTeacherOrders = studentCloudTeacherMap.get(e.getUserId());
-                    if(cloudTeacherOrders != null && cloudTeacherOrders.size() > 0){
+                    if (cloudTeacherOrders != null && cloudTeacherOrders.size() > 0) {
                         BigDecimal cloudAmount = BigDecimal.ZERO;
                         for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
-                            if (cloudTeacherOrder.getEndTime() == null || DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(),DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
-                                    DateUtil.stringToDate(DateUtil.format(nowDate,DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT)) >= 0) {
+                            if (cloudTeacherOrder.getEndTime() == null || DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
+                                    DateUtil.stringToDate(DateUtil.format(nowDate, DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT)) >= 0) {
                                 cloudAmount = cloudAmount.add(cloudTeacherOrder.getAmount());
                             }
                         }
@@ -592,17 +595,17 @@ public class StudentManageServiceImpl implements StudentManageService {
         //未完成vip、网管课学员数量/该乐团在读学员人数*100%
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.getMusicGroupStu(musicGroupId);
         List<Integer> userIds = studentRegistrations.stream().filter(e -> e.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL).map(StudentRegistration::getUserId).collect(Collectors.toList());
-        if(userIds.size() == 0){
-            resultMap.put("courseRate","0.00%");
+        if (userIds.size() == 0) {
+            resultMap.put("courseRate", "0.00%");
             return resultMap;
         }
-        List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds,"VIP,PRACTICE");
+        List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds, "VIP,PRACTICE");
         double size = userIds.size() + 0d;
-        if(hasCourseStudent.size() == 0){
-            resultMap.put("courseRate","0.00%");
-        }else {
+        if (hasCourseStudent.size() == 0) {
+            resultMap.put("courseRate", "0.00%");
+        } else {
             double d = (hasCourseStudent.size() / size) * 100;
-            resultMap.put("courseRate",String.format("%.2f", d) + "%");
+            resultMap.put("courseRate", String.format("%.2f", d) + "%");
         }
         return resultMap;
     }
@@ -637,7 +640,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     public void updateUser(SysUser sysUser) {
         studentManageDao.updateUser(sysUser);
         Student student = studentDao.get(sysUser.getId());
-        if(student != null) {
+        if (student != null) {
             student.setCurrentGradeNum(sysUser.getCurrentGradeNum());
             student.setCurrentClass(sysUser.getCurrentClass());
             Optional.ofNullable(sysUser.getSubjectId()).ifPresent(student::setSubjectIdList);
@@ -682,7 +685,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         Date date = new Date();
         SysUser sysUser = teacherDao.getUserWithPhone(student.getPhone());
         if (sysUser != null) {
-            EmployeeServiceImpl.checkTenantId(student.getTenantId(),sysUser.getTenantId());
+            EmployeeServiceImpl.checkTenantId(student.getTenantId(), sysUser.getTenantId());
             if (sysUser.getUserType().contains("STUDENT")) {
                 throw new BizException("手机号已被占用");
             } else {
@@ -734,13 +737,13 @@ public class StudentManageServiceImpl implements StudentManageService {
         // 同步更新机构手机号 如果它存在
         SysUser user = teacherDao.getUser(student.getId());
         tenantInfoService.updatePhone(student.getPhone(), user.getPhone());
-        activityUserMapperDao.updateTeacherId(student.getUserId(),student.getTeacherId());
-        if(Objects.nonNull(student.getCarePackage())||Objects.nonNull(student.getComeOnPackage())){
+        activityUserMapperDao.updateTeacherId(student.getUserId(), student.getTeacherId());
+        if (Objects.nonNull(student.getCarePackage()) || Objects.nonNull(student.getComeOnPackage())) {
             Student oldStudent = studentDao.get(userId);
-            if(Objects.nonNull(oldStudent.getCarePackage())&&oldStudent.getCarePackage().equals(2)){
+            if (Objects.nonNull(oldStudent.getCarePackage()) && oldStudent.getCarePackage().equals(2)) {
                 student.setCarePackage(oldStudent.getCarePackage());
             }
-            if(Objects.nonNull(oldStudent.getComeOnPackage())&&oldStudent.getComeOnPackage().equals(2)){
+            if (Objects.nonNull(oldStudent.getComeOnPackage()) && oldStudent.getComeOnPackage().equals(2)) {
                 student.setComeOnPackage(oldStudent.getComeOnPackage());
             }
         }
@@ -750,8 +753,8 @@ public class StudentManageServiceImpl implements StudentManageService {
             LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
             studentExtracurricularExercisesSituationService.deleteByStudent(student.getId(), monDayDate.toString());
         }
-        webFeignService.updateNickName(userId,student.getUsername());
-        imFeignService.update(new ImUserModel(userId.toString(),student.getUsername(),sysUser1 == null ? null:sysUser1.getAvatar()));
+        webFeignService.updateNickName(userId, student.getUsername());
+        imFeignService.update(new ImUserModel(userId.toString(), student.getUsername(), sysUser1 == null ? null : sysUser1.getAvatar()));
         return userId;
     }
 
@@ -782,9 +785,9 @@ public class StudentManageServiceImpl implements StudentManageService {
         studentNum = studentNum == null ? 0 : studentNum;
         signInNum = signInNum == null ? 0 : signInNum;
         leaveNum = leaveNum == null ? 0 : leaveNum;
-        if(Objects.nonNull(courseSchedule)&& !CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())){
+        if (Objects.nonNull(courseSchedule) && !CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())) {
             sum.put("truantNum", studentNum - signInNum - leaveNum);
-        }else{
+        } else {
             sum.put("truantNum", 0);
         }
         sum.put("homeworkNum", studentManageDao.countHomeworkNum(courseScheduleId));
@@ -811,14 +814,14 @@ public class StudentManageServiceImpl implements StudentManageService {
 
             List<UserGroupDto> allUserGroups = studentRegistrationDao.getUserGroups(new ArrayList<>(studentIds));
             Map<Integer, List<UserGroupDto>> userGroupsMap = new HashMap<>();
-            if(!CollectionUtils.isEmpty(allUserGroups)){
+            if (!CollectionUtils.isEmpty(allUserGroups)) {
                 userGroupsMap = allUserGroups.stream().collect(Collectors.groupingBy(UserGroupDto::getUserId));
             }
 
             for (Student4operating student4operating : dataList) {
                 List<UserGroupDto> userGroupDtos = userGroupsMap.get(student4operating.getStudentId());
-                if(!CollectionUtils.isEmpty(userGroupDtos)){
-                    student4operating.setGroupNames(userGroupDtos.stream().filter(ug->StringUtils.isNotBlank(ug.getGroupName())).map(UserGroupDto::getGroupName).sorted().collect(Collectors.joining(",")));
+                if (!CollectionUtils.isEmpty(userGroupDtos)) {
+                    student4operating.setGroupNames(userGroupDtos.stream().filter(ug -> StringUtils.isNotBlank(ug.getGroupName())).map(UserGroupDto::getGroupName).sorted().collect(Collectors.joining(",")));
                 }
             }
         }
@@ -827,14 +830,14 @@ public class StudentManageServiceImpl implements StudentManageService {
     }
 
     @Override
-    public List<BasicUserDto> queryCanAddStudent(String musicGroupId, String batchNo,String search,Integer subjectId) {
-        return studentManageDao.queryCanAddStudent(musicGroupId, batchNo,search,subjectId);
+    public List<BasicUserDto> queryCanAddStudent(String musicGroupId, String batchNo, String search, Integer subjectId) {
+        return studentManageDao.queryCanAddStudent(musicGroupId, batchNo, search, subjectId);
     }
 
     @Override
     public PageInfo<BasicUserDto> queryGroupStudents(StudentQueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null || sysUser.getId() == null){
+        if (sysUser == null || sysUser.getId() == null) {
             throw new BizException("用户信息获取失败");
         }
         PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
@@ -843,17 +846,17 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         params.put("offset", pageInfo.getOffset());
         Integer count = 0;
-        if("VIP".equals(queryInfo.getGroupType())){
+        if ("VIP".equals(queryInfo.getGroupType())) {
             count = studentManageDao.countVipGroupStudents(params);
-        }else {
+        } else {
             count = studentManageDao.countPracticeGroupStudents(params);
         }
         List<BasicUserDto> dataList = new ArrayList<>();
         if (count > 0) {
             pageInfo.setTotal(count);
-            if("VIP".equals(queryInfo.getGroupType())){
+            if ("VIP".equals(queryInfo.getGroupType())) {
                 dataList = studentManageDao.queryVipGroupStudents(params);
-            }else {
+            } else {
                 dataList = studentManageDao.queryPracticeGroupStudents(params);
             }
         }
@@ -864,7 +867,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public PageInfo<StudentNoStartCoursesDto> queryStudentNoStartCourse(StudentQueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null || sysUser.getId() == null){
+        if (sysUser == null || sysUser.getId() == null) {
             throw new BizException("用户信息获取失败");
         }
         PageInfo<StudentNoStartCoursesDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
@@ -901,8 +904,11 @@ public class StudentManageServiceImpl implements StudentManageService {
         if (count > 0) {
             pageInfo.setTotal(count);
             dataList = musicGroupPaymentStudentCourseDetailDao.pageStudentSubTotalCourseTimes(params);
+            //内部分页
+            int endIdx = pageInfo.getPageNo() * pageInfo.getLimit();
+            dataList = dataList.subList(pageInfo.getOffset(), dataList.size() > endIdx ? endIdx : dataList.size());
 
-            Map<Integer,String> classMap = MapUtil.convertMybatisMap(classGroupDao.queryStudentClassGroupMap(queryInfo.getMusicGroupId()));
+            Map<Integer, String> classMap = MapUtil.convertMybatisMap(classGroupDao.queryStudentClassGroupMap(queryInfo.getMusicGroupId()));
             for (StudentSubTotalCourseTimesDto timesDto : dataList) {
                 timesDto.setClassGroupId(classMap.get(timesDto.getUserId()));
             }
@@ -919,7 +925,7 @@ public class StudentManageServiceImpl implements StudentManageService {
 
         Integer tenantId = TenantContextHolder.getTenantId();
         String studentErrorLeaveNum = sysTenantConfigService.getTenantConfigValue(SysConfigService.STUDENT_ERROR_LEAVE_NUM, tenantId);
-        if(StringUtils.isEmpty(studentErrorLeaveNum)){
+        if (StringUtils.isEmpty(studentErrorLeaveNum)) {
             return pageInfo;
         }
         Map<String, Object> params = new HashMap<>();
@@ -931,21 +937,21 @@ public class StudentManageServiceImpl implements StudentManageService {
         params.put("currentMonth", currentMonth);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         //当前用户是否是分部经理
-        Boolean onlyForRole = employeePositionService.onlyForRole(SysUserRoleEnum.EDUCATION,sysUser.getId(),sysUser.getIsSuperAdmin());
+        Boolean onlyForRole = employeePositionService.onlyForRole(SysUserRoleEnum.EDUCATION, sysUser.getId(), sysUser.getIsSuperAdmin());
         if (onlyForRole) {
             //获取教务老师关联的班级列表
             List<Long> classGroupIds = classGroupDao.queryGroupClassGroupIds(sysUser.getId());
-            if(classGroupIds == null || classGroupIds.size() == 0){
+            if (classGroupIds == null || classGroupIds.size() == 0) {
                 return pageInfo;
             }
             params.put("classGroupIds", classGroupIds);
         }
-        params.put("studentErrorLeaveNum",studentErrorLeaveNum);
+        params.put("studentErrorLeaveNum", studentErrorLeaveNum);
         int count = indexBaseMonthDataDao.countStudentErrorLeave1(params);
         List<StudentErrorLeaveDto> dataList = new ArrayList<>();
         if (count > 0) {
             //获取近两个月异常请假次数
-            Map<Integer,BigDecimal> leaveNumMap = MapUtil.convertIntegerMap(indexBaseMonthDataDao.getStudentErrorLeaveNumMap(params));
+            Map<Integer, BigDecimal> leaveNumMap = MapUtil.convertIntegerMap(indexBaseMonthDataDao.getStudentErrorLeaveNumMap(params));
             pageInfo.setTotal(count);
             dataList = indexBaseMonthDataDao.queryStudentErrorLeave(params);
             for (StudentErrorLeaveDto studentErrorLeaveDto : dataList) {
@@ -977,47 +983,47 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Transactional(rollbackFor = Exception.class)
     public void updateChildrenDayStudent(ActivityCourseDetailDto activityCourseDetailDto) {
         Student student = studentDao.getLocked(activityCourseDetailDto.getUserId());
-        if(student == null){
+        if (student == null) {
             throw new BizException("学员信息不存在");
         }
-        if(!activityCourseDetailDto.getVip1().equals(0) && !activityCourseDetailDto.getVip1().equals(1)){
+        if (!activityCourseDetailDto.getVip1().equals(0) && !activityCourseDetailDto.getVip1().equals(1)) {
             throw new BizException("修改失败:排课次数异常");
         }
-        if(!activityCourseDetailDto.getVip2().equals(0) && !activityCourseDetailDto.getVip2().equals(1)){
+        if (!activityCourseDetailDto.getVip2().equals(0) && !activityCourseDetailDto.getVip2().equals(1)) {
             throw new BizException("修改失败:排课次数异常");
         }
-        if(!activityCourseDetailDto.getFree_vip().equals(0) && !activityCourseDetailDto.getFree_vip().equals(1)){
+        if (!activityCourseDetailDto.getFree_vip().equals(0) && !activityCourseDetailDto.getFree_vip().equals(1)) {
             throw new BizException("修改失败:排课次数异常");
         }
-        if(!activityCourseDetailDto.getMusic_theory().equals(0) && !activityCourseDetailDto.getMusic_theory().equals(1)){
+        if (!activityCourseDetailDto.getMusic_theory().equals(0) && !activityCourseDetailDto.getMusic_theory().equals(1)) {
             throw new BizException("修改失败:排课次数异常");
         }
-        if(activityCourseDetailDto.getMusic_theory().equals(1)){
+        if (activityCourseDetailDto.getMusic_theory().equals(1)) {
             String activityCourseDetail = student.getActivityCourseDetail();
-            if(StringUtils.isNotEmpty(activityCourseDetail)){
+            if (StringUtils.isNotEmpty(activityCourseDetail)) {
                 ActivityCourseDetailDto detailDto = JSON.parseObject(activityCourseDetail, ActivityCourseDetailDto.class);
-                if(detailDto.getMusic_theory() == null || detailDto.getMusic_theory().equals(0)){
+                if (detailDto.getMusic_theory() == null || detailDto.getMusic_theory().equals(0)) {
                     SysUser sysUser = sysUserFeignService.queryUserById(student.getUserId());
-                    if(sysUser == null){
+                    if (sysUser == null) {
                         throw new BizException("请登录");
                     }
                     OrganizationDegreeCourseFee degreeCourseFee = organizationDegreeCourseFeeDao.getByOrganId(sysUser.getOrganId());
-                    if(degreeCourseFee == null){
+                    if (degreeCourseFee == null) {
                         throw new BizException("学员所在分部未配置考级价格");
                     }
                     activityCourseDetailDto.setMusic_theory_price(degreeCourseFee.getTheory());
-                }else {
+                } else {
                     activityCourseDetailDto.setMusic_theory_price(detailDto.getMusic_theory_price());
                 }
-            }else {
+            } else {
                 SysUser sysUser = teacherDao.getUser(student.getUserId());
                 OrganizationDegreeCourseFee degreeCourseFee = organizationDegreeCourseFeeDao.getByOrganId(sysUser.getOrganId());
-                if(degreeCourseFee == null){
+                if (degreeCourseFee == null) {
                     throw new BizException("学员所在分部未配置考级价格");
                 }
                 activityCourseDetailDto.setMusic_theory_price(degreeCourseFee.getTheory());
             }
-        }else {
+        } else {
             activityCourseDetailDto.setMusic_theory_price(BigDecimal.ZERO);
         }
         activityCourseDetailDto.setUserId(null);
@@ -1030,35 +1036,35 @@ public class StudentManageServiceImpl implements StudentManageService {
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
         List<Integer> studentIds = new ArrayList<>();
-        params.put("studentIds",studentIds);
+        params.put("studentIds", studentIds);
         PageInfo<Student> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-        if(queryInfo.getHasMusicCourse() != null){
-            params.put("groupType","MUSIC");
-            params.put("hasCourse",queryInfo.getHasMusicCourse());
+        if (queryInfo.getHasMusicCourse() != null) {
+            params.put("groupType", "MUSIC");
+            params.put("hasCourse", queryInfo.getHasMusicCourse());
             studentIds = courseScheduleDao.queryHasCourseStudentIds(params);
-            if(studentIds == null || studentIds.size() == 0){
+            if (studentIds == null || studentIds.size() == 0) {
                 return pageInfo;
             }
         }
-        if(queryInfo.getHasPracticeCourse() != null){
-            params.put("groupType","PRACTICE");
-            params.put("hasCourse",queryInfo.getHasPracticeCourse());
-            params.put("studentIds",studentIds);
+        if (queryInfo.getHasPracticeCourse() != null) {
+            params.put("groupType", "PRACTICE");
+            params.put("hasCourse", queryInfo.getHasPracticeCourse());
+            params.put("studentIds", studentIds);
             studentIds = courseScheduleDao.queryHasCourseStudentIds(params);
-            if(studentIds == null || studentIds.size() == 0){
+            if (studentIds == null || studentIds.size() == 0) {
                 return pageInfo;
             }
         }
-        if(queryInfo.getHasVipCourse() != null){
-            params.put("groupType","VIP");
-            params.put("hasCourse",queryInfo.getHasVipCourse());
-            params.put("studentIds",studentIds);
+        if (queryInfo.getHasVipCourse() != null) {
+            params.put("groupType", "VIP");
+            params.put("hasCourse", queryInfo.getHasVipCourse());
+            params.put("studentIds", studentIds);
             studentIds = courseScheduleDao.queryHasCourseStudentIds(params);
-            if(studentIds == null || studentIds.size() == 0){
+            if (studentIds == null || studentIds.size() == 0) {
                 return pageInfo;
             }
         }
-        params.put("studentIds",studentIds);
+        params.put("studentIds", studentIds);
         List<Student> dataList = null;
         int count = studentDao.countStudent(params);
         if (count > 0) {

+ 27 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -23,7 +23,9 @@ import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.common.page.QueryInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,16 +51,6 @@ import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.entity.BaseStudentDto;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentPreRegistration;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
@@ -1358,6 +1350,31 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         return pageInfo;
     }
 
+    @Override
+    public PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo) {
+        PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<BasicUserDto> dataList = null;
+        int count = teacherDao.countStudent(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = teacherDao.queryStudent(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public List<BaseMapDto> queryStuSubjectId(String organIds) {
+        return studentDao.queryStuSubjectId(organIds);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public  <T extends BaseStudentDto> void insertStudent(T baseStudent){
         Student student = new Student();

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

@@ -874,4 +874,9 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher> implem
         return PageUtil.pageInfo(teacherDao.getStudentsByTeacherOrgan(pageInfo, param));
     }
 
+    @Override
+    public List<BaseMapDto<Integer, String>> queryOrganList(Integer userId) {
+        return teacherDao.queryOrganList(userId);
+    }
+
 }

+ 5 - 4
mec-biz/src/main/resources/config/mybatis/ActivityUserMapperMapper.xml

@@ -309,17 +309,18 @@
 	<select id="exportStudentSubCourse" resultType="com.ym.mec.biz.dal.dto.ExportStudentSubCourse">
 		select
 			t.user_id_ as userId,
-			ifnull(su.real_name_,su.username_) as username,
+			su.username_ as username,
 			t.activity_id_ as activityId,
 			o.name_ as organizationName,
 			vga.name_ as activityName,
-			sum(ifnull(t.sub_course_num_,0) + ifnull(sub_give_course_num_,0)) as subCourseNum
+			sum(if(t.vip_flag_ = 1 || t.practice_flag_ = 1 ,1,0)) as subCourseNum,
+			sum(if(t.give_vip_flag_ = 1 || t.give_practice_flag_ = 1,1,0)) as subGiveCourseNum
 		from activity_user_mapper t
 				 left join vip_group_activity vga on t.activity_id_ = vga.id_
 				 left join sys_user su on t.user_id_ = su.id_
 				 left join organization o on su.organ_id_ = o.id_
-		where t.tenant_id_ = #{tenantId}
-		and (t.sub_course_num_>0 or t.sub_give_course_num_>0)
+		where t.tenant_id_ = #{tenantId} and t.return_fee_ = 0
+		and (t.vip_flag_ = 1 or t.give_vip_flag_ = 1 or t.practice_flag_ = 1 or t.give_practice_flag_ = 1)
 		<if test="organId != null">
 			AND FIND_IN_SET(su.organ_id_,#{organId})
 		</if>

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

@@ -62,6 +62,7 @@
         <result column="organ_name_" property="organName"/>
         <result column="isCallNames" property="isCallNames" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="is_complaints_" property="isComplaints"/>
+        <result column="merged_course_ids_" property="mergedCourseIds"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
@@ -2389,7 +2390,11 @@
             s.name_ schoole_name_,
             o.name_ organ_name_,
             CASE WHEN COUNT(CASE WHEN sa.id_ IS NULL OR (sa.status_ = 'LEAVE' AND sa.remark_ IS NOT NULL) THEN NULL ELSE 1 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_
+            CASE WHEN COUNT(CASE WHEN ta.is_complaints_ = 1 THEN 1 ELSE NULL END) > 0 THEN '1' ELSE '0' END is_complaints_,
+            (
+                select group_concat(csd.id_) from course_schedule csd
+                where csd.del_flag_ = 0 and csd.id_ != csd.new_course_id_  and csd.new_course_id_ = cs.new_course_id_
+            ) as merged_course_ids_
         FROM
             course_schedule cs
             LEFT JOIN school s ON cs.schoole_id_=s.id_

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

@@ -100,16 +100,28 @@
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="HfMerchantConfig" parameterType="map">
-		SELECT * FROM hf_merchant_config ORDER BY id_
+		SELECT * FROM hf_merchant_config
+        <include refid="queryPageSql"/>
+		ORDER BY id_
 		<include refid="global.limit" />
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM hf_merchant_config
+        <include refid="queryPageSql"/>
 	</select>
 	
 	<select id="queryByTenantId" resultMap="HfMerchantConfig">
 		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId}
 	</select>
+
+    <sql id="queryPageSql">
+        <where>
+            <if test="tenantId != null">
+                AND tenant_id_ = #{tenantId}
+            </if>
+        </where>
+    </sql>
+
 </mapper>

+ 31 - 13
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -264,6 +264,7 @@
             <result property="value" column="value"/>
         </collection>
     </resultMap>
+
     <select id="queryStudentSubTotalCourseTimes" resultMap="StudentSubTotalCourseTimesDto">
         SELECT mgpscd.user_id_,
                su.username_,
@@ -296,32 +297,49 @@
         <if test="courseType != null and courseType != ''">
             and mgpscd.course_type_ = #{courseType}
         </if>
+        <if test="classGroupId != null and classGroupId != ''">
+            AND find_in_set(#{classGroupId},v.class_group_id_)
+        </if>
     </sql>
 
     <!-- 查询当前表的总记录数 -->
     <select id="countStudentSubTotalCourseTimes" resultType="java.lang.Integer">
     select count(*) from (
-        SELECT
-            mgpscd.user_id_,mgpscd.course_type_
-        FROM music_group_payment_student_course_detail mgpscd
-        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        SELECT mgpscd.user_id_ FROM music_group_payment_student_course_detail mgpscd
         LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        left join (
+            SELECT
+                user_id_ ,GROUP_CONCAT(class_group_id_) as class_group_id_
+            FROM class_group_student_mapper
+            WHERE music_group_id_ = #{musicGroupId} AND status_ = 'NORMAL'
+            GROUP BY user_id_
+        ) v on mgpscd.user_id_ = v.user_id_
         <include refid="sqlStudentSubTotalCourseTimes"/>
-        GROUP BY mgpscd.user_id_,mgpscd.course_type_
+        GROUP BY mgpscd.user_id_
     ) a
     </select>
 
     <select id="pageStudentSubTotalCourseTimes" resultMap="StudentSubTotalCourseTimesDto"
             parameterType="map">
-        SELECT mgpscd.user_id_,su.username_,su.phone_,mgpscd.course_type_ 'key',mgpscd.course_type_,
-            SUM(CASE WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_ ELSE 0 END) 'value'
-        FROM music_group_payment_student_course_detail mgpscd
-        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
-        LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
-        <include refid="sqlStudentSubTotalCourseTimes"/>
-        GROUP BY mgpscd.user_id_,mgpscd.course_type_
-        <include refid="global.limit"/>
+            SELECT
+                mgpscd.user_id_,su.username_,su.phone_,
+                mgpscd.course_type_ 'key',
+                SUM(CASE WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_ ELSE 0 END) 'value'
+            FROM music_group_payment_student_course_detail mgpscd
+            LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
+            LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+            left join (
+                SELECT
+                    user_id_ ,GROUP_CONCAT(class_group_id_) as class_group_id_
+                FROM class_group_student_mapper
+                WHERE music_group_id_ = #{musicGroupId} AND status_ = 'NORMAL'
+                GROUP BY user_id_
+            ) v on mgpscd.user_id_ = v.user_id_
+            <include refid="sqlStudentSubTotalCourseTimes"/>
+            GROUP BY mgpscd.user_id_,mgpscd.course_type_
     </select>
+
     <select id="findByCalenderAndUserId" resultMap="MusicGroupPaymentStudentCourseDetail">
         SELECT * FROM music_group_payment_student_course_detail WHERE music_group_payment_calender_id_ = #{calenderId}
         <if test="userId != null">

+ 989 - 792
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -6,803 +6,1000 @@
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.StudentExtracurricularExercisesSituationDao">
 
-	<resultMap type="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" id="StudentExtracurricularExercisesSituation">
-		<result column="id_" property="id" />
-		<result column="student_id_" property="studentId" />
-		<result column="week_of_year_" property="weekOfYear" />
-		<result column="monday_" property="monday" />
-		<result column="sunday_" property="sunday" />
-		<result column="teacher_id_" property="teacherId" />
-		<result column="expect_exercises_num_" property="expectExercisesNum" />
-		<result column="actual_exercises_num_" property="actualExercisesNum" />
-		<result column="exercises_reply_num_" property="exercisesReplyNum" />
-		<result column="exercises_message_num_" property="exercisesMessageNum" />
-		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
-		<result column="create_time_" property="createTime" />
-		<result column="update_time_" property="updateTime" />
-		<result column="last_submit_time_" property="lastSubmitTime"/>
-		<result column="serve_type_" property="serveType"/>
-		<result column="course_ids_" property="courseIds"/>
-		<result column="not_over_course_ids_" property="notOverCourseIds"/>
-		<result column="not_over_course_num_" property="notOverCourseNum"/>
+    <resultMap type="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation"
+               id="StudentExtracurricularExercisesSituation">
+        <result column="id_" property="id"/>
+        <result column="student_id_" property="studentId"/>
+        <result column="week_of_year_" property="weekOfYear"/>
+        <result column="monday_" property="monday"/>
+        <result column="sunday_" property="sunday"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="expect_exercises_num_" property="expectExercisesNum"/>
+        <result column="actual_exercises_num_" property="actualExercisesNum"/>
+        <result column="exercises_reply_num_" property="exercisesReplyNum"/>
+        <result column="exercises_message_num_" property="exercisesMessageNum"/>
+        <result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="last_submit_time_" property="lastSubmitTime"/>
+        <result column="serve_type_" property="serveType"/>
+        <result column="course_ids_" property="courseIds"/>
+        <result column="not_over_course_ids_" property="notOverCourseIds"/>
+        <result column="not_over_course_num_" property="notOverCourseNum"/>
         <result column="tenant_id_" property="tenantId"/>
-	</resultMap>
-
-	<resultMap id="StudentExercisesSituationDto" type="com.ym.mec.biz.dal.dto.StudentExercisesSituationDto" extends="StudentExtracurricularExercisesSituation">
-		<result column="student_name_" property="studentName"/>
-		<result column="teacher_name_" property="teacherName"/>
-		<result column="organ_name_" property="organName"/>
-		<result column="exist_vip_course_" property="existVipCourse"/>
-	</resultMap>
-
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="StudentExtracurricularExercisesSituation" >
-		SELECT * FROM student_extracurricular_exercises_situation_ WHERE id_ = #{id} 
-	</select>
-
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_ where tenant_id_ = #{tenantId} ORDER BY id_
-	</select>
-
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" >
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
-		</selectKey>
-		-->
-		INSERT INTO student_extracurricular_exercises_situation_ (id_,student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
-		                                                          actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
-		                                                          exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
-		                                                          serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_,tenant_id_)
-		VALUES(#{id},#{studentId},#{weekOfYear},#{monday},#{sunday},#{teacherId},#{expectExercisesNum},#{actualExercisesNum},#{exercisesReplyNum},
-		       #{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW(),#{lastSubmitTime},#{serveType},#{courseIds},#{notOverCourseIds},#{notOverCourseNum},#{tenantId})
-	</insert>
-
-	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO student_extracurricular_exercises_situation_ (student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
-		                                                          actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
-		                                                          exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
-		                                                          serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_,tenant_id_)
-		VALUES
-		<foreach collection="situations" item="situation" separator=",">
-			(#{situation.studentId},#{situation.weekOfYear},#{situation.monday},#{situation.sunday},#{situation.teacherId},#{situation.expectExercisesNum},
-			#{situation.actualExercisesNum},#{situation.exercisesReplyNum},#{situation.exercisesMessageNum},#{situation.exercisesMessageTimelyNum},
-			NOW(),NOW(),#{situation.lastSubmitTime},#{situation.serveType},#{situation.courseIds},#{situation.notOverCourseIds},#{situation.notOverCourseNum},#{situation.tenantId})
-		</foreach>
-	</insert>
-
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation">
-		UPDATE student_extracurricular_exercises_situation_
-		<set>
-			<if test="exercisesReplyNum != null">
-				exercises_reply_num_ = #{exercisesReplyNum},
-			</if>
-			<if test="monday != null">
-				monday_ = #{monday},
-			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
-			<if test="weekOfYear != null">
-				week_of_year_ = #{weekOfYear},
-			</if>
-			<if test="exercisesMessageNum != null">
-				exercises_message_num_ = #{exercisesMessageNum},
-			</if>
-			<if test="createTime != null">
-				create_time_ = #{createTime},
-			</if>
-			<if test="teacherId != null">
-				teacher_id_ = #{teacherId},
-			</if>
-			<if test="actualExercisesNum != null">
-				actual_exercises_num_ = #{actualExercisesNum},
-			</if>
-			<if test="exercisesMessageTimelyNum != null">
-				exercises_message_timely_num_ = #{exercisesMessageTimelyNum},
-			</if>
-			<if test="studentId != null">
-				student_id_ = #{studentId},
-			</if>
-			<if test="expectExercisesNum != null">
-				expect_exercises_num_ = #{expectExercisesNum},
-			</if>
-			<if test="sunday != null">
-				sunday_ = #{sunday},
-			</if>
-			<if test="lastSubmitTime!=null">
-				last_submit_time_=#{lastSubmitTime},
-			</if>
-			<if test="serveType!=null">
-				serve_type_=#{serveType},
-			</if>
-			<if test="courseIds!=null and courseIds!=''">
-				course_ids_=#{courseIds},
-			</if>
-			<if test="notOverCourseIds!=null and notOverCourseIds!=''">
-				not_over_course_ids_=#{notOverCourseIds},
-			</if>
-			<if test="notOverCourseNum!=null">
-				not_over_course_num_=#{notOverCourseNum},
-			</if>
-			update_time_ = #{updateTime}
-		</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
-	</update>
-
-	<update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation">
-		<foreach collection="situations" item="situation" separator=";">
-			UPDATE student_extracurricular_exercises_situation_
-			<set>
-				<if test="situation.exercisesReplyNum != null">
-					exercises_reply_num_ = #{situation.exercisesReplyNum},
-				</if>
-				<if test="situation.monday != null">
-					monday_ = #{situation.monday},
-				</if>
-				<if test="situation.weekOfYear != null">
-					week_of_year_ = #{situation.weekOfYear},
-				</if>
-				<if test="situation.exercisesMessageNum != null">
-					exercises_message_num_ = #{situation.exercisesMessageNum},
-				</if>
-				<if test="situation.teacherId != null">
-					teacher_id_ = #{situation.teacherId},
-				</if>
-				<if test="situation.actualExercisesNum != null">
-					actual_exercises_num_ = #{situation.actualExercisesNum},
-				</if>
-				<if test="situation.exercisesMessageTimelyNum != null">
-					exercises_message_timely_num_ = #{situation.exercisesMessageTimelyNum},
-				</if>
-				<if test="situation.studentId != null">
-					student_id_ = #{situation.studentId},
-				</if>
-				<if test="situation.expectExercisesNum != null">
-					expect_exercises_num_ = #{situation.expectExercisesNum},
-				</if>
-				<if test="situation.sunday != null">
-					sunday_ = #{situation.sunday},
-				</if>
-				<if test="situation.lastSubmitTime!=null">
-					last_submit_time_=#{situation.lastSubmitTime},
-				</if>
-				<if test="situation.serveType!=null">
-					serve_type_=#{situation.serveType},
-				</if>
-				<if test="situation.courseIds!=null">
-					course_ids_=#{situation.courseIds},
-				</if>
-				<if test="situation.notOverCourseIds!=null and situation.notOverCourseIds!=''">
-					not_over_course_ids_=#{situation.notOverCourseIds},
-				</if>
-				<if test="situation.notOverCourseNum!=null">
-					not_over_course_num_=#{situation.notOverCourseNum},
-				</if>
-				update_time_ = NOW()
-			</set> WHERE id_ = #{situation.id} and tenant_id_ = #{situation.tenantId}
-		</foreach>
-	</update>
-
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete" >
-		DELETE FROM student_extracurricular_exercises_situation_ WHERE id_ = #{id} 
-	</delete>
-	<delete id="deleteByMonday">
-		DELETE FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
-		<if test="studentIds!=null and studentIds.size()>0">
-			AND student_id_ IN
-			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
-				#{studentId}
-			</foreach>
-		</if>
-	</delete>
-	<select id="selectByMonday" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
-		<if test="studentIds!=null and studentIds.size()>0">
-			AND student_id_ IN
-			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
-				#{studentId}
-			</foreach>
-		</if>
-	</select>
-	<delete id="deleteByStudent">
-		DELETE FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
-		<if test="monday!=null and monday!=''">
-			AND monday_=#{monday}
-		</if>
-	</delete>
-	<delete id="batchDelete">
-		DELETE FROM student_extracurricular_exercises_situation_ WHERE id_ IN
-		<foreach collection="situationIds" item="id" open="(" close=")" separator=",">
-			#{id}
-		</foreach>
-	</delete>
-
-	<select id="selectByStudent" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
-		<if test="monday!=null and monday!=''">
-			AND monday_=#{monday}
-		</if>
-	</select>
-
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="StudentExtracurricularExercisesSituation" parameterType="map">
-		SELECT * FROM student_extracurricular_exercises_situation_ where tenant_id_ = #{tenantId} ORDER BY id_ <include refid="global.limit"/>
-	</select>
-
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM student_extracurricular_exercises_situation_ where tenant_id_ = #{tenantId}
-	</select>
-
-	<select id="findExercisesSituations" resultMap="StudentExercisesSituationDto">
-		SELECT
-		sees.id_ id_,
-		student_id_,
-		stu.username_ student_name_,
-		tea.real_name_ teacher_name_,
-		o.name_ organ_name_,
-		sees.monday_,
-		sees.sunday_,
-		sees.serve_type_,
-		sees.course_ids_,
-		expect_exercises_num_ expect_exercises_num_,
-		actual_exercises_num_ actual_exercises_num_,
-		<if test="submitStartDate==null or submitEndDate==null">
-			exercises_reply_num_ exercises_reply_num_,
-			exercises_message_num_ exercises_message_num_,
-			exercises_message_timely_num_ exercises_message_timely_num_,
-			last_submit_time_ last_submit_time_
-		</if>
-		<if test="submitStartDate!=null and submitEndDate!=null">
-			IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0) exercises_reply_num_,
-			IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) exercises_message_num_,
-			IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0) exercises_message_timely_num_,
-			IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},last_submit_time_, NULL) last_submit_time_
-		</if>
-		FROM
-			student_extracurricular_exercises_situation_ sees
-			LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
-			LEFT JOIN teacher t ON t.id_=sees.teacher_id_
-			LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
-			LEFT JOIN organization o ON stu.organ_id_=o.id_
-		WHERE
-		sees.monday_ &gt;= #{monday}
-		AND sees.sunday_ &lt;= #{sunday} and sees.tenant_id_ = #{tenantId}
-		<if test="teacherId!=null">
-			AND sees.teacher_id_ = #{teacherId}
-		</if>
-		<if test="search!=null">
-			AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
-		</if>
-		<if test="organId != null and organId != ''">
-			AND FIND_IN_SET(t.organ_id_,#{organId})
-		</if>
-		<if test="existVipCourse!=null and existVipCourse==1">
-			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existVipCourse!=null and existVipCourse==0">
-			AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existPracticeCourse!=null and existPracticeCourse==1">
-			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existPracticeCourse!=null and existPracticeCourse==0">
-			AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-
-		<if test="expectExercisesNum!=null">
-			AND expect_exercises_num_ = #{expectExercisesNum}
-		</if>
-		<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
-			AND actual_exercises_num_ &lt; expect_exercises_num_
-		</if>
-		<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
-			AND actual_exercises_num_ &gt;= expect_exercises_num_
-		</if>
-		<if test="submitStartDate==null or submitEndDate==null">
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-				AND exercises_reply_num_ &lt; actual_exercises_num_
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-				AND exercises_reply_num_ &gt;= actual_exercises_num_
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-				AND exercises_message_num_ &lt; exercises_reply_num_
-			</if>
-			<if test="serviceIsError!=null and serviceIsError">
-				AND (actual_exercises_num_ &lt; expect_exercises_num_ OR exercises_message_num_ &lt; exercises_reply_num_)
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-				AND exercises_message_num_ &gt;= exercises_reply_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-				AND exercises_message_timely_num_ &lt; exercises_message_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-				AND exercises_message_timely_num_ &gt;= exercises_message_num_
-			</if>
-		</if>
-		<if test="submitStartDate!=null and submitEndDate!=null">
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0) &lt; actual_exercises_num_
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0) &gt;= actual_exercises_num_
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_
-			</if>
-			<if test="serviceIsError!=null and serviceIsError">
-				AND (actual_exercises_num_ &lt; expect_exercises_num_ OR IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_)
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &gt;= exercises_reply_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0) &lt; exercises_message_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0) &gt;= exercises_message_num_
-			</if>
-		</if>
-		ORDER BY student_id_
-		<include refid="global.limit"/>
-	</select>
-
-	<select id="countExercisesSituations" resultType="int">
-		SELECT COUNT(1) FROM (
-		SELECT
-		1
-		FROM
-		student_extracurricular_exercises_situation_ sees
-		LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
-		LEFT JOIN teacher t ON t.id_=sees.teacher_id_
-		LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
-		LEFT JOIN organization o ON stu.organ_id_=o.id_
-		WHERE
-		sees.monday_ &gt;= #{monday}
-		AND sees.sunday_ &lt;= #{sunday} and sees.tenant_id_ = #{tenantId}
-		<if test="teacherId!=null">
-			AND sees.teacher_id_ = #{teacherId}
-		</if>
-		<if test="search!=null">
-			AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
-		</if>
-		<if test="organId != null and organId != ''">
-			AND FIND_IN_SET(t.organ_id_, #{organId})
-		</if>
-		<if test="existVipCourse!=null and existVipCourse==1">
-			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existVipCourse!=null and existVipCourse==0">
-			AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existPracticeCourse!=null and existPracticeCourse==1">
-			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-		<if test="existPracticeCourse!=null and existPracticeCourse==0">
-			AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
-		</if>
-
-		<if test="expectExercisesNum!=null">
-			AND expect_exercises_num_ = #{expectExercisesNum}
-		</if>
-		<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
-			AND actual_exercises_num_ &lt; expect_exercises_num_
-		</if>
-		<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
-			AND actual_exercises_num_ &gt;= expect_exercises_num_
-		</if>
-		<if test="submitStartDate==null or submitEndDate==null">
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-				AND exercises_reply_num_ &lt; actual_exercises_num_
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-				AND exercises_reply_num_ &gt;= actual_exercises_num_
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-				AND exercises_message_num_ &lt; exercises_reply_num_
-			</if>
-			<if test="serviceIsError!=null and serviceIsError">
-				AND (actual_exercises_num_ &lt; expect_exercises_num_ OR exercises_message_num_ &lt; exercises_reply_num_)
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-				AND exercises_message_num_ &gt;= exercises_reply_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-				AND exercises_message_timely_num_ &lt; exercises_message_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-				AND exercises_message_timely_num_ &gt;= exercises_message_num_
-			</if>
-		</if>
-		<if test="submitStartDate!=null and submitEndDate!=null">
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0) &lt; actual_exercises_num_
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0) &gt;= actual_exercises_num_
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_
-			</if>
-			<if test="serviceIsError!=null and serviceIsError">
-				AND (actual_exercises_num_ &lt; expect_exercises_num_ OR IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_)
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &gt;= exercises_reply_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0) &lt; exercises_message_num_
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-				AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0) &gt;= exercises_message_num_
-			</if>
-		</if>
-		) tmp
-	</select>
-
-	<select id="findExercisesSituationsById" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_ WHERE id_ IN
-		<foreach collection="ids" item="id" separator="," open="(" close=")">
-			#{id}
-		</foreach>
-	</select>
-
-	<select id="findTeacherExercisesServiceSituations" resultType="com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto">
-		SELECT
-		teacher_id_ teacherId,
-		COUNT( exercises_reply_num_ ) expectExercisesNum,
-		COUNT( CASE WHEN actual_exercises_num_ = 1 THEN 1 ELSE NULL END ) actualExercisesNum
-		FROM
-		student_extracurricular_exercises_situation_
-		FORCE INDEX(monday_)
-		WHERE monday_ = #{monday}
-		AND teacher_id_ IN
-		<foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
-			#{teacherId}
-		</foreach>
-		GROUP BY
-		teacher_id_;
-	</select>
-
-	<select id="findLastWeekTodayUpdateNum" resultType="int">
-		SELECT COUNT(id_) FROM student_extracurricular_exercises_situation_ WHERE sunday_=#{sunday} AND DATE_FORMAT(update_time_,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') 
+    </resultMap>
+
+    <resultMap id="StudentExercisesSituationDto" type="com.ym.mec.biz.dal.dto.StudentExercisesSituationDto"
+               extends="StudentExtracurricularExercisesSituation">
+        <result column="student_name_" property="studentName"/>
+        <result column="teacher_name_" property="teacherName"/>
+        <result column="organ_name_" property="organName"/>
+        <result column="exist_vip_course_" property="existVipCourse"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT *
+        FROM student_extracurricular_exercises_situation_
+        WHERE id_ = #{id}
+    </select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT *
+        FROM student_extracurricular_exercises_situation_
+        where tenant_id_ = #{tenantId}
+        ORDER BY id_
+    </select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation"
+            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        <!--
+        <selectKey resultClass="int" keyProperty="id" >
+        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
+        </selectKey>
+        -->
+        INSERT INTO student_extracurricular_exercises_situation_
+        (id_,student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
+        actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
+        exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
+        serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_,tenant_id_)
+        VALUES(#{id},#{studentId},#{weekOfYear},#{monday},#{sunday},#{teacherId},#{expectExercisesNum},#{actualExercisesNum},#{exercisesReplyNum},
+        #{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW(),#{lastSubmitTime},#{serveType},#{courseIds},#{notOverCourseIds},#{notOverCourseNum},#{tenantId})
+    </insert>
+
+    <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation"
+            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        INSERT INTO student_extracurricular_exercises_situation_
+        (student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,
+        actual_exercises_num_,exercises_reply_num_,exercises_message_num_,
+        exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,
+        serve_type_,course_ids_,not_over_course_ids_,not_over_course_num_,tenant_id_)
+        VALUES
+        <foreach collection="situations" item="situation" separator=",">
+            (#{situation.studentId},#{situation.weekOfYear},#{situation.monday},#{situation.sunday},#{situation.teacherId},#{situation.expectExercisesNum},
+            #{situation.actualExercisesNum},#{situation.exercisesReplyNum},#{situation.exercisesMessageNum},#{situation.exercisesMessageTimelyNum},
+            NOW(),NOW(),#{situation.lastSubmitTime},#{situation.serveType},#{situation.courseIds},#{situation.notOverCourseIds},#{situation.notOverCourseNum},#{situation.tenantId})
+        </foreach>
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation">
+        UPDATE student_extracurricular_exercises_situation_
+        <set>
+            <if test="exercisesReplyNum != null">
+                exercises_reply_num_ = #{exercisesReplyNum},
+            </if>
+            <if test="monday != null">
+                monday_ = #{monday},
+            </if>
+            <if test="id != null">
+                id_ = #{id},
+            </if>
+            <if test="weekOfYear != null">
+                week_of_year_ = #{weekOfYear},
+            </if>
+            <if test="exercisesMessageNum != null">
+                exercises_message_num_ = #{exercisesMessageNum},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="teacherId != null">
+                teacher_id_ = #{teacherId},
+            </if>
+            <if test="actualExercisesNum != null">
+                actual_exercises_num_ = #{actualExercisesNum},
+            </if>
+            <if test="exercisesMessageTimelyNum != null">
+                exercises_message_timely_num_ = #{exercisesMessageTimelyNum},
+            </if>
+            <if test="studentId != null">
+                student_id_ = #{studentId},
+            </if>
+            <if test="expectExercisesNum != null">
+                expect_exercises_num_ = #{expectExercisesNum},
+            </if>
+            <if test="sunday != null">
+                sunday_ = #{sunday},
+            </if>
+            <if test="lastSubmitTime!=null">
+                last_submit_time_=#{lastSubmitTime},
+            </if>
+            <if test="serveType!=null">
+                serve_type_=#{serveType},
+            </if>
+            <if test="courseIds!=null and courseIds!=''">
+                course_ids_=#{courseIds},
+            </if>
+            <if test="notOverCourseIds!=null and notOverCourseIds!=''">
+                not_over_course_ids_=#{notOverCourseIds},
+            </if>
+            <if test="notOverCourseNum!=null">
+                not_over_course_num_=#{notOverCourseNum},
+            </if>
+            update_time_ = #{updateTime}
+        </set>
+        WHERE id_ = #{id} and tenant_id_ = #{tenantId}
+    </update>
+
+    <update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation">
+        <foreach collection="situations" item="situation" separator=";">
+            UPDATE student_extracurricular_exercises_situation_
+            <set>
+                <if test="situation.exercisesReplyNum != null">
+                    exercises_reply_num_ = #{situation.exercisesReplyNum},
+                </if>
+                <if test="situation.monday != null">
+                    monday_ = #{situation.monday},
+                </if>
+                <if test="situation.weekOfYear != null">
+                    week_of_year_ = #{situation.weekOfYear},
+                </if>
+                <if test="situation.exercisesMessageNum != null">
+                    exercises_message_num_ = #{situation.exercisesMessageNum},
+                </if>
+                <if test="situation.teacherId != null">
+                    teacher_id_ = #{situation.teacherId},
+                </if>
+                <if test="situation.actualExercisesNum != null">
+                    actual_exercises_num_ = #{situation.actualExercisesNum},
+                </if>
+                <if test="situation.exercisesMessageTimelyNum != null">
+                    exercises_message_timely_num_ = #{situation.exercisesMessageTimelyNum},
+                </if>
+                <if test="situation.studentId != null">
+                    student_id_ = #{situation.studentId},
+                </if>
+                <if test="situation.expectExercisesNum != null">
+                    expect_exercises_num_ = #{situation.expectExercisesNum},
+                </if>
+                <if test="situation.sunday != null">
+                    sunday_ = #{situation.sunday},
+                </if>
+                <if test="situation.lastSubmitTime!=null">
+                    last_submit_time_=#{situation.lastSubmitTime},
+                </if>
+                <if test="situation.serveType!=null">
+                    serve_type_=#{situation.serveType},
+                </if>
+                <if test="situation.courseIds!=null">
+                    course_ids_=#{situation.courseIds},
+                </if>
+                <if test="situation.notOverCourseIds!=null and situation.notOverCourseIds!=''">
+                    not_over_course_ids_=#{situation.notOverCourseIds},
+                </if>
+                <if test="situation.notOverCourseNum!=null">
+                    not_over_course_num_=#{situation.notOverCourseNum},
+                </if>
+                update_time_ = NOW()
+            </set>
+            WHERE id_ = #{situation.id} and tenant_id_ = #{situation.tenantId}
+        </foreach>
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+        DELETE
+        FROM student_extracurricular_exercises_situation_
+        WHERE id_ = #{id}
+    </delete>
+    <delete id="deleteByMonday">
+        DELETE FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
+        <if test="studentIds!=null and studentIds.size()>0">
+            AND student_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+        </if>
+    </delete>
+    <select id="selectByMonday" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
+        <if test="studentIds!=null and studentIds.size()>0">
+            AND student_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+        </if>
+    </select>
+    <delete id="deleteByStudent">
+        DELETE FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
+        <if test="monday!=null and monday!=''">
+            AND monday_=#{monday}
+        </if>
+    </delete>
+    <delete id="batchDelete">
+        DELETE FROM student_extracurricular_exercises_situation_ WHERE id_ IN
+        <foreach collection="situationIds" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectByStudent" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
+        <if test="monday!=null and monday!=''">
+            AND monday_=#{monday}
+        </if>
+    </select>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="StudentExtracurricularExercisesSituation" parameterType="map">
+        SELECT * FROM student_extracurricular_exercises_situation_ where tenant_id_ = #{tenantId} ORDER BY id_
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM student_extracurricular_exercises_situation_
+        where tenant_id_ = #{tenantId}
+    </select>
+
+    <select id="findExercisesSituations" resultMap="StudentExercisesSituationDto">
+        SELECT
+        sees.id_ id_,
+        student_id_,
+        stu.username_ student_name_,
+        tea.real_name_ teacher_name_,
+        o.name_ organ_name_,
+        sees.monday_,
+        sees.sunday_,
+        sees.serve_type_,
+        sees.course_ids_,
+        expect_exercises_num_ expect_exercises_num_,
+        actual_exercises_num_ actual_exercises_num_,
+        <if test="submitStartDate==null or submitEndDate==null">
+            exercises_reply_num_ exercises_reply_num_,
+            exercises_message_num_ exercises_message_num_,
+            exercises_message_timely_num_ exercises_message_timely_num_,
+            last_submit_time_ last_submit_time_
+        </if>
+        <if test="submitStartDate!=null and submitEndDate!=null">
+            IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+            #{submitEndDate},exercises_reply_num_,0) exercises_reply_num_,
+            IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+            #{submitEndDate},exercises_message_num_,0) exercises_message_num_,
+            IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+            #{submitEndDate},exercises_message_timely_num_,0) exercises_message_timely_num_,
+            IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+            #{submitEndDate},last_submit_time_, NULL) last_submit_time_
+        </if>
+        FROM
+        student_extracurricular_exercises_situation_ sees
+        LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
+        LEFT JOIN teacher t ON t.id_=sees.teacher_id_
+        LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
+        LEFT JOIN organization o ON stu.organ_id_=o.id_
+        WHERE
+        sees.monday_ &gt;= #{monday}
+        AND sees.sunday_ &lt;= #{sunday} and sees.tenant_id_ = #{tenantId}
+        <if test="teacherId!=null">
+            AND sees.teacher_id_ = #{teacherId}
+        </if>
+        <if test="search!=null">
+            AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
+        </if>
+        <if test="organId != null and organId != ''">
+            AND FIND_IN_SET(t.organ_id_,#{organId})
+        </if>
+        <if test="existVipCourse!=null and existVipCourse==1">
+            AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND
+            class_date_ BETWEEN #{monday} AND #{sunday})
+        </if>
+        <if test="existVipCourse!=null and existVipCourse==0">
+            AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND
+            class_date_ BETWEEN #{monday} AND #{sunday})
+        </if>
+        <if test="existPracticeCourse!=null and existPracticeCourse==1">
+            AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE
+            cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN
+            #{monday} AND #{sunday})
+        </if>
+        <if test="existPracticeCourse!=null and existPracticeCourse==0">
+            AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE
+            cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN
+            #{monday} AND #{sunday})
+        </if>
+
+        <if test="expectExercisesNum!=null">
+            AND expect_exercises_num_ = #{expectExercisesNum}
+        </if>
+        <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+            AND actual_exercises_num_ &lt; expect_exercises_num_
+        </if>
+        <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+            AND actual_exercises_num_ &gt;= expect_exercises_num_
+        </if>
+        <if test="submitStartDate==null or submitEndDate==null">
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND exercises_reply_num_ &lt; actual_exercises_num_
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND exercises_reply_num_ &gt;= actual_exercises_num_
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND exercises_message_num_ &lt; exercises_reply_num_
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (actual_exercises_num_ &lt; expect_exercises_num_ OR exercises_message_num_ &lt;
+                exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND exercises_message_num_ &gt;= exercises_reply_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND exercises_message_timely_num_ &lt; exercises_message_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND exercises_message_timely_num_ &gt;= exercises_message_num_
+            </if>
+        </if>
+        <if test="submitStartDate!=null and submitEndDate!=null">
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_reply_num_,0) &lt; actual_exercises_num_
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_reply_num_,0) &gt;= actual_exercises_num_
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (actual_exercises_num_ &lt; expect_exercises_num_ OR IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d')
+                BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_num_,0) &gt;= exercises_reply_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_timely_num_,0) &lt; exercises_message_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_timely_num_,0) &gt;= exercises_message_num_
+            </if>
+        </if>
+        ORDER BY student_id_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countExercisesSituations" resultType="int">
+        SELECT COUNT(1) FROM (
+        SELECT
+        1
+        FROM
+        student_extracurricular_exercises_situation_ sees
+        LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
+        LEFT JOIN teacher t ON t.id_=sees.teacher_id_
+        LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
+        LEFT JOIN organization o ON stu.organ_id_=o.id_
+        WHERE
+        sees.monday_ &gt;= #{monday}
+        AND sees.sunday_ &lt;= #{sunday} and sees.tenant_id_ = #{tenantId}
+        <if test="teacherId!=null">
+            AND sees.teacher_id_ = #{teacherId}
+        </if>
+        <if test="search!=null">
+            AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
+        </if>
+        <if test="organId != null and organId != ''">
+            AND FIND_IN_SET(t.organ_id_, #{organId})
+        </if>
+        <if test="existVipCourse!=null and existVipCourse==1">
+            AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND
+            class_date_ BETWEEN #{monday} AND #{sunday})
+        </if>
+        <if test="existVipCourse!=null and existVipCourse==0">
+            AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND
+            class_date_ BETWEEN #{monday} AND #{sunday})
+        </if>
+        <if test="existPracticeCourse!=null and existPracticeCourse==1">
+            AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE
+            cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN
+            #{monday} AND #{sunday})
+        </if>
+        <if test="existPracticeCourse!=null and existPracticeCourse==0">
+            AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON
+            cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE
+            cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN
+            #{monday} AND #{sunday})
+        </if>
+
+        <if test="expectExercisesNum!=null">
+            AND expect_exercises_num_ = #{expectExercisesNum}
+        </if>
+        <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+            AND actual_exercises_num_ &lt; expect_exercises_num_
+        </if>
+        <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+            AND actual_exercises_num_ &gt;= expect_exercises_num_
+        </if>
+        <if test="submitStartDate==null or submitEndDate==null">
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND exercises_reply_num_ &lt; actual_exercises_num_
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND exercises_reply_num_ &gt;= actual_exercises_num_
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND exercises_message_num_ &lt; exercises_reply_num_
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (actual_exercises_num_ &lt; expect_exercises_num_ OR exercises_message_num_ &lt;
+                exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND exercises_message_num_ &gt;= exercises_reply_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND exercises_message_timely_num_ &lt; exercises_message_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND exercises_message_timely_num_ &gt;= exercises_message_num_
+            </if>
+        </if>
+        <if test="submitStartDate!=null and submitEndDate!=null">
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_reply_num_,0) &lt; actual_exercises_num_
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_reply_num_,0) &gt;= actual_exercises_num_
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (actual_exercises_num_ &lt; expect_exercises_num_ OR IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d')
+                BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0) &lt; exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_num_,0) &gt;= exercises_reply_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_timely_num_,0) &lt; exercises_message_num_
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND
+                #{submitEndDate},exercises_message_timely_num_,0) &gt;= exercises_message_num_
+            </if>
+        </if>
+        ) tmp
+    </select>
+
+    <select id="findExercisesSituationsById" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT * FROM student_extracurricular_exercises_situation_ WHERE id_ IN
+        <foreach collection="ids" item="id" separator="," open="(" close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <select id="findTeacherExercisesServiceSituations" resultType="com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto">
+        SELECT
+        teacher_id_ teacherId,
+        COUNT( exercises_reply_num_ ) expectExercisesNum,
+        COUNT( CASE WHEN actual_exercises_num_ = 1 THEN 1 ELSE NULL END ) actualExercisesNum
+        FROM
+        student_extracurricular_exercises_situation_
+        FORCE INDEX(monday_)
+        WHERE monday_ = #{monday}
+        AND teacher_id_ IN
+        <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+            #{teacherId}
+        </foreach>
+        GROUP BY
+        teacher_id_;
+    </select>
+
+    <select id="findLastWeekTodayUpdateNum" resultType="int">
+        SELECT COUNT(id_) FROM student_extracurricular_exercises_situation_ WHERE sunday_=#{sunday} AND
+        DATE_FORMAT(update_time_,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d')
         <if test="tenantId != null">
-        and tenant_id_ = #{tenantId}
+            and tenant_id_ = #{tenantId}
         </if>
     </select>
 
-	<select id="findStudentExercisesSituationsWithMonDay" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday} AND student_id_=#{studentId}
-	</select>
-
-	<select id="getNoFinishedServiceTeacher" resultType="java.util.Map">
-		SELECT
-			teacher_id_ AS 'key',
-			COUNT( student_id_ ) AS 'value'
-		FROM
-			student_extracurricular_exercises_situation_
-		WHERE
-			actual_exercises_num_ = 0
-			AND serve_type_ = 'EXERCISE'
-			AND monday_ = #{monday}
-			AND teacher_id_ IS NOT NULL
-		GROUP BY
-			teacher_id_
-	</select>
-
-	<select id="countWeekServiceNum" resultType="int">
-		SELECT COUNT(id_) FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday} 
+    <select id="findStudentExercisesSituationsWithMonDay" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT *
+        FROM student_extracurricular_exercises_situation_
+        WHERE monday_ = #{monday}
+          AND student_id_ = #{studentId}
+    </select>
+
+    <select id="getNoFinishedServiceTeacher" resultType="java.util.Map">
+        SELECT teacher_id_ AS 'key', COUNT( student_id_ ) AS 'value'
+        FROM student_extracurricular_exercises_situation_
+        WHERE actual_exercises_num_ = 0
+          AND serve_type_ = 'EXERCISE'
+          AND monday_ = #{monday}
+          AND teacher_id_ IS NOT NULL
+        GROUP BY teacher_id_
+    </select>
+
+    <select id="countWeekServiceNum" resultType="int">
+        SELECT COUNT(id_) FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday}
         <if test="tenantId != null">
-        and tenant_id_ = #{tenantId}
-        </if>
-	</select>
-
-	<select id="findWeekServiceWithStudents" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_
-		<where>
-			teacher_id_=#{teacherId}
-			<if test="monday != null and monday != ''">
-				AND monday_ = #{monday}
-			</if>
-			<if test="studentIds!=null and studentIds.size()>0">
-				AND student_id_ IN
-				<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
-					#{studentId}
-				</foreach>
-			</if>
-		</where>
-	</select>
+            and tenant_id_ = #{tenantId}
+        </if>
+    </select>
+
+    <select id="findWeekServiceWithStudents" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT * FROM student_extracurricular_exercises_situation_
+        <where>
+            teacher_id_=#{teacherId}
+            <if test="monday != null and monday != ''">
+                AND monday_ = #{monday}
+            </if>
+            <if test="studentIds!=null and studentIds.size()>0">
+                AND student_id_ IN
+                <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                    #{studentId}
+                </foreach>
+            </if>
+        </where>
+    </select>
     <select id="findTeacherNoStartServices" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_ WHERE teacher_id_=#{teacherId} AND actual_exercises_num_&lt;=0 AND serve_type_='HOMEWORK';
-	</select>
-
-
-	<select id="getTeacherHomeworkCourseIdsWithMonday" resultType="string">
-		SELECT course_ids_ FROM student_extracurricular_exercises_situation_
-		WHERE teacher_id_=#{teacherId}
-		  	AND serve_type_='HOMEWORK'
-			<if test="monday!=null and monday!=''">
-				AND monday_=#{monday}
-			</if>
-	</select>
-
-	<select id="findServiceWithCourse"
-			resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday} AND FIND_IN_SET(#{courseId}, course_ids_)
-	</select>
-
-	<resultMap id="TeacherServeDto" type="com.ym.mec.biz.dal.dto.TeacherServeDto">
-		<result column="organ_name_" property="organName"/>
-		<result column="monday_" property="monday"/>
-		<result column="sunday_" property="sunday"/>
-		<result column="teacher_id_" property="teacherId"/>
-		<result column="teacher_name_" property="teacherName"/>
-		<result column="homework_num_" property="homeworkNum"/>
-		<result column="exercise_num_" property="exerciseNum"/>
-		<result column="un_done_" property="unDone"/>
-		<result column="remind_time_" property="remindDate"/>
-		<result column="operator_name_" property="operatorName"/>
-		<result column="job_nature_" property="jobNature" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-		<result column="expect_exercises_num_" property="expectExercisesNum" />
-		<result column="actual_exercises_num_" property="actualExercisesNum" />
-		<result column="exercises_reply_num_" property="exercisesReplyNum" />
-		<result column="exercises_message_num_" property="exercisesMessageNum" />
-		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
-	</resultMap>
-
-	<sql id="queryTeacherServeInfoCondition">
-		<where>
-			sees.tenant_id_ = #{tenantId} 
-			<if test="organIds != null and organIds.size()>0">
-				AND tea.organ_id_ IN
-				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-					#{organId}
-				</foreach>
-			</if>
-			<if test="monday!=null and monday!='' and sunday!=null and sunday!=''">
-				AND sees.monday_ BETWEEN #{monday} AND #{sunday}
-			</if>
-			<if test="teacherId!=null">
-				AND sees.teacher_id_ = #{teacherId}
-			</if>
-			<if test="reminded!=null and reminded==0">
-				AND NOT EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
-			</if>
-			<if test="reminded!=null and reminded==1">
-				AND EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
-			</if>
-			<if test="operatorId!=null">
-				AND EXISTS (SELECT id_ FROM teacher_remind WHERE operator_id_=#{operatorId} AND teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
-			</if>
-			<if test="jobNature!=null">
-				AND tea.job_nature_=#{jobNature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-			</if>
-		</where>
-	</sql>
-
-	<select id="queryTeacherServeInfo" resultMap="TeacherServeDto">
-		SELECT
-			organ.name_ organ_name_,
-			sees.monday_,
-			sees.sunday_,
-			sees.teacher_id_,
-			su.real_name_ teacher_name_,
-		    tea.job_nature_,
-			SUM(expect_exercises_num_) expect_exercises_num_,
-			SUM(actual_exercises_num_) actual_exercises_num_,
-			SUM(exercises_reply_num_) exercises_reply_num_,
-			SUM(exercises_message_num_) exercises_message_num_,
-			SUM(exercises_message_timely_num_) exercises_message_timely_num_,
-			SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
-			SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
-			SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
-		FROM
-			student_extracurricular_exercises_situation_ sees
-			LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
-			LEFT JOIN organization organ ON organ.id_=tea.organ_id_
-			LEFT JOIN sys_user su ON tea.id_=su.id_
-		<include refid="queryTeacherServeInfoCondition" />
-		GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
-		<trim prefix="HAVING" prefixOverrides="AND">
-			<if test="unDone!=null">
-				<if test="unDone==1">
-					AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
-				</if>
-				<if test="unDone==0">
-					AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
-				</if>
-			</if>
-			<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
-				AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
-			</if>
-			<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
-				AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-				AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
-			</if>
-			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-				AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-				AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
-			</if>
-			<if test="serviceIsError!=null and serviceIsError">
-				AND (SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_) OR SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_))
-			</if>
-			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-				AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-				AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
-			</if>
-			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-				AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
-			</if>
-		</trim>
-		ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
-		<include refid="global.limit"></include>
-	</select>
-
-	<select id="countTeacherServeInfo" resultType="int">
-		SELECT COUNT(1) FROM (
-			SELECT
-				sees.id_
-			FROM
-				student_extracurricular_exercises_situation_ sees
-				LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
-			<include refid="queryTeacherServeInfoCondition" />
-			GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
-			<trim prefix="HAVING" prefixOverrides="AND">
-				<if test="unDone!=null">
-					<if test="unDone==1">
-						AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
-					</if>
-					<if test="unDone==0">
-						AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
-					</if>
-				</if>
-				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
-					AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
-				</if>
-				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
-					AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
-				</if>
-				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
-				</if>
-				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
-				</if>
-				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
-				</if>
-				<if test="serviceIsError!=null and serviceIsError">
-					AND (SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_) OR SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_))
-				</if>
-				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
-				</if>
-				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
-				</if>
-				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
-				</if>
-			</trim>
-			ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
-		) e
-	</select>
-
-	<select id="findTeacherServeWithDate" resultMap="StudentExtracurricularExercisesSituation">
-		SELECT * FROM student_extracurricular_exercises_situation_
-		WHERE monday_ BETWEEN #{monday} AND #{sunday}
-			<if test="serveType!=null and serveType!=''">
-				AND serve_type_=#{serveType}
-			</if>
-			  AND teacher_id_ IN
-			  <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
-				  #{teacherId}
-			  </foreach>
-	</select>
-
-	<select id="getHomeworkData" resultMap="com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao.IndexBaseMonthData">
-		SELECT
-		sees.monday_ month_,
-		<choose>
-			<when test="type == 'submit'">
-				SUM(sees.actual_exercises_num_) total_num_,
-				SUM(sees.exercises_reply_num_) activate_num_,
-				TRUNCATE(SUM(sees.exercises_reply_num_)/SUM(sees.actual_exercises_num_)*100, 2) percent_
-			</when>
-			<when test="type == 'comment'">
-				SUM(sees.exercises_reply_num_) total_num_,
-				SUM(sees.exercises_message_num_) activate_num_,
-				TRUNCATE(SUM(sees.exercises_message_num_)/SUM(sees.exercises_reply_num_)*100, 2) percent_
-			</when>
-			<otherwise>
-				SUM(sees.expect_exercises_num_-sees.not_over_course_num_) total_num_,
-				SUM(sees.actual_exercises_num_) activate_num_,
-				TRUNCATE(SUM(sees.actual_exercises_num_)/SUM(sees.expect_exercises_num_-sees.not_over_course_num_)*100, 2) percent_
-			</otherwise>
-		</choose>
-		FROM student_extracurricular_exercises_situation_ sees
-		LEFT JOIN teacher tea ON sees.teacher_id_=tea.id_
-		WHERE tea.job_nature_='FULL_TIME'
-		AND DATE_FORMAT(sees.monday_, '%Y-%m-%d')&gt;=#{startDay}
-		AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d')&lt;=#{endDay}
-		AND (sees.serve_type_ = 'EXERCISE' OR EXISTS (SELECT id_ FROM course_schedule WHERE group_type_='MUSIC' AND music_group_id_=#{musicGroupId} AND FIND_IN_SET(id_, sees.course_ids_)))
-		AND sees.student_id_ IN
-		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
-			#{studentId}
-		</foreach>
-		GROUP BY sees.monday_
-	</select>
-
-	<select id="queryCourseIdByClassDate" resultType="java.lang.Long">
-		SELECT DISTINCT csts.course_schedule_id_ FROM course_schedule_teacher_salary csts
-		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
-		LEFT JOIN student_extracurricular_exercises_situation_ se ON se.teacher_id_ = csts.user_id_
-		WHERE csts.user_id_ = #{teacherId} AND cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth}
-		AND FIND_IN_SET(cs.id_,se.course_ids_) AND se.serve_type_ = 'HOMEWORK'
-	</select>
-
-	<select id="countWaitCreateHomeworkNum" resultType="java.lang.Integer">
-		SELECT COUNT(id_) FROM student_extracurricular_exercises_situation_ WHERE teacher_id_ = #{teacherId}
-		AND expect_exercises_num_ > actual_exercises_num_ AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN monday_ AND sunday_
-		AND serve_type_ = 'EXERCISE'
-	</select>
-	<select id="countWaitCreateHomeworkNum1" resultType="java.lang.Integer">
-		SELECT SUM(t.num_) FROM (
-		SELECT COUNT(se.id_) num_ FROM student_extracurricular_exercises_situation_ se
-		LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_,se.course_ids_)
-		WHERE se.teacher_id_ = #{teacherId}
-		AND se.expect_exercises_num_ > se.actual_exercises_num_ AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN se.monday_ AND se.sunday_
-		AND se.serve_type_ = 'HOMEWORK' AND cs.group_type_ = 'MUSIC' AND cs.class_date_ = DATE_FORMAT(NOW(), '%Y-%m-%d')
-		UNION ALL
-		SELECT COUNT(se.id_) num_ FROM student_extracurricular_exercises_situation_ se
-		LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_,se.course_ids_)
-		WHERE se.teacher_id_ = #{teacherId}
-		AND se.expect_exercises_num_ > se.actual_exercises_num_ AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN se.monday_ AND se.sunday_
-		AND se.serve_type_ = 'HOMEWORK' AND cs.group_type_ != 'MUSIC' AND cs.class_date_ &lt;= DATE_FORMAT(NOW(), '%Y-%m-%d'))t
-	</select>
-
-	<select id="queryTeacherPerformanceIndicator" resultMap="TeacherServeDto">
-		SELECT
-			organ.name_ organ_name_,
-			sees.monday_,
-			sees.sunday_,
-			sees.teacher_id_,
-			su.real_name_ teacher_name_,
-		    tea.job_nature_,
-			SUM(expect_exercises_num_) expect_exercises_num_,
-			SUM(actual_exercises_num_) actual_exercises_num_,
-			SUM(exercises_reply_num_) exercises_reply_num_,
-			SUM(exercises_message_num_) exercises_message_num_,
-			SUM(exercises_message_timely_num_) exercises_message_timely_num_,
-			SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
-			SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
-			SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
-		FROM
-			student_extracurricular_exercises_situation_ sees
-			LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
-			LEFT JOIN organization organ ON organ.id_=tea.organ_id_
-			LEFT JOIN sys_user su ON tea.id_=su.id_
-		<include refid="queryTeacherServeInfoCondition" />
-		GROUP BY sees.teacher_id_
-		ORDER BY sees.teacher_id_
-		<include refid="global.limit"></include>
-	</select>
-	<select id="getHomeworkSituations" resultType="java.util.Date">
-		SELECT cs.class_date_ FROM student_extracurricular_exercises_situation_ sees
-		LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_,sees.course_ids_)
-		WHERE sees.serve_type_ = #{serveType} AND cs.id_ != #{courseScheduleId} AND cs.music_group_id_ = #{musicGroupId}
-		AND sees.monday_ = #{month} AND sees.student_id_ = #{userId}
-	</select>
+        SELECT *
+        FROM student_extracurricular_exercises_situation_
+        WHERE teacher_id_ = #{teacherId}
+          AND actual_exercises_num_ &lt;= 0
+          AND serve_type_ = 'HOMEWORK';
+    </select>
+
+
+    <select id="getTeacherHomeworkCourseIdsWithMonday" resultType="string">
+        SELECT course_ids_ FROM student_extracurricular_exercises_situation_
+        WHERE teacher_id_=#{teacherId}
+        AND serve_type_='HOMEWORK'
+        <if test="monday!=null and monday!=''">
+            AND monday_=#{monday}
+        </if>
+    </select>
+
+    <select id="findServiceWithCourse"
+            resultMap="StudentExtracurricularExercisesSituation">
+        SELECT *
+        FROM student_extracurricular_exercises_situation_
+        WHERE monday_ = #{monday}
+          AND FIND_IN_SET(#{courseId}, course_ids_)
+    </select>
+
+    <resultMap id="TeacherServeDto" type="com.ym.mec.biz.dal.dto.TeacherServeDto">
+        <result column="organ_name_" property="organName"/>
+        <result column="monday_" property="monday"/>
+        <result column="sunday_" property="sunday"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="teacher_name_" property="teacherName"/>
+        <result column="homework_num_" property="homeworkNum"/>
+        <result column="exercise_num_" property="exerciseNum"/>
+        <result column="un_done_" property="unDone"/>
+        <result column="remind_time_" property="remindDate"/>
+        <result column="operator_name_" property="operatorName"/>
+        <result column="job_nature_" property="jobNature" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="expect_exercises_num_" property="expectExercisesNum"/>
+        <result column="actual_exercises_num_" property="actualExercisesNum"/>
+        <result column="exercises_reply_num_" property="exercisesReplyNum"/>
+        <result column="exercises_message_num_" property="exercisesMessageNum"/>
+        <result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum"/>
+    </resultMap>
+
+
+    <sql id="queryTeacherServeInfoCondition">
+        <where>
+            sees.tenant_id_ = #{tenantId}
+            <if test="organIds != null and organIds.size()>0">
+                AND tea.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="monday!=null and monday!='' and sunday!=null and sunday!=''">
+                AND sees.monday_ BETWEEN #{monday} AND #{sunday}
+            </if>
+            <if test="teacherId!=null">
+                AND sees.teacher_id_ = #{teacherId}
+            </if>
+            <if test="reminded!=null and reminded==0">
+                AND NOT EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ =
+                sees.monday_ AND type_='SERVICE')
+            </if>
+            <if test="reminded!=null and reminded==1">
+                AND EXISTS (SELECT id_ FROM teacher_remind WHERE teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_
+                AND type_='SERVICE')
+            </if>
+            <if test="operatorId!=null">
+                AND EXISTS (SELECT id_ FROM teacher_remind WHERE operator_id_=#{operatorId} AND
+                teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
+            </if>
+            <if test="jobNature!=null">
+                AND tea.job_nature_=#{jobNature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryTeacherServeInfo" resultMap="TeacherServeDto">
+        SELECT
+        organ.name_ organ_name_,
+        sees.monday_,
+        sees.sunday_,
+        sees.teacher_id_,
+        su.real_name_ teacher_name_,
+        tea.job_nature_,
+        SUM(expect_exercises_num_) expect_exercises_num_,
+        SUM(actual_exercises_num_) actual_exercises_num_,
+        SUM(exercises_reply_num_) exercises_reply_num_,
+        SUM(exercises_message_num_) exercises_message_num_,
+        SUM(exercises_message_timely_num_) exercises_message_timely_num_,
+        SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
+        SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
+        SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
+        FROM
+        student_extracurricular_exercises_situation_ sees
+        LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+        LEFT JOIN organization organ ON organ.id_=tea.organ_id_
+        LEFT JOIN sys_user su ON tea.id_=su.id_
+        <include refid="queryTeacherServeInfoCondition"/>
+        GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
+        <trim prefix="HAVING" prefixOverrides="AND">
+            <if test="unDone!=null">
+                <if test="unDone==1">
+                    AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_
+                    )
+                </if>
+                <if test="unDone==0">
+                    AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM(
+                    sees.actual_exercises_num_ )
+                </if>
+            </if>
+            <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+                AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
+            </if>
+            <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+                AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_) OR SUM(exercises_message_num_) &lt;
+                SUM(exercises_reply_num_))
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
+            </if>
+        </trim>
+        ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countTeacherServeInfo" resultType="int">
+        SELECT COUNT(1) FROM (
+        SELECT
+        sees.id_
+        FROM
+        student_extracurricular_exercises_situation_ sees
+        LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+        <include refid="queryTeacherServeInfoCondition"/>
+        GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
+        <trim prefix="HAVING" prefixOverrides="AND">
+            <if test="unDone!=null">
+                <if test="unDone==1">
+                    AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_
+                    )
+                </if>
+                <if test="unDone==0">
+                    AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM(
+                    sees.actual_exercises_num_ )
+                </if>
+            </if>
+            <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+                AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
+            </if>
+            <if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+                AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+                AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
+            </if>
+            <if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+                AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+                AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
+            </if>
+            <if test="serviceIsError!=null and serviceIsError">
+                AND (SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_) OR SUM(exercises_message_num_) &lt;
+                SUM(exercises_reply_num_))
+            </if>
+            <if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+                AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+                AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
+            </if>
+            <if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+                AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
+            </if>
+        </trim>
+        ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
+        ) e
+    </select>
+
+    <select id="findTeacherServeWithDate" resultMap="StudentExtracurricularExercisesSituation">
+        SELECT * FROM student_extracurricular_exercises_situation_
+        WHERE monday_ BETWEEN #{monday} AND #{sunday}
+        <if test="serveType!=null and serveType!=''">
+            AND serve_type_=#{serveType}
+        </if>
+        AND teacher_id_ IN
+        <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+            #{teacherId}
+        </foreach>
+    </select>
+
+    <select id="getHomeworkData" resultMap="com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao.IndexBaseMonthData">
+        SELECT
+        sees.monday_ month_,
+        <choose>
+            <when test="type == 'submit'">
+                SUM(sees.actual_exercises_num_) total_num_,
+                SUM(sees.exercises_reply_num_) activate_num_,
+                TRUNCATE(SUM(sees.exercises_reply_num_)/SUM(sees.actual_exercises_num_)*100, 2) percent_
+            </when>
+            <when test="type == 'comment'">
+                SUM(sees.exercises_reply_num_) total_num_,
+                SUM(sees.exercises_message_num_) activate_num_,
+                TRUNCATE(SUM(sees.exercises_message_num_)/SUM(sees.exercises_reply_num_)*100, 2) percent_
+            </when>
+            <otherwise>
+                SUM(sees.expect_exercises_num_-sees.not_over_course_num_) total_num_,
+                SUM(sees.actual_exercises_num_) activate_num_,
+                TRUNCATE(SUM(sees.actual_exercises_num_)/SUM(sees.expect_exercises_num_-sees.not_over_course_num_)*100,
+                2) percent_
+            </otherwise>
+        </choose>
+        FROM student_extracurricular_exercises_situation_ sees
+        LEFT JOIN teacher tea ON sees.teacher_id_=tea.id_
+        WHERE tea.job_nature_='FULL_TIME'
+        AND DATE_FORMAT(sees.monday_, '%Y-%m-%d')&gt;=#{startDay}
+        AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d')&lt;=#{endDay}
+        AND (sees.serve_type_ = 'EXERCISE' OR EXISTS (SELECT id_ FROM course_schedule WHERE group_type_='MUSIC' AND
+        music_group_id_=#{musicGroupId} AND FIND_IN_SET(id_, sees.course_ids_)))
+        AND sees.student_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        GROUP BY sees.monday_
+    </select>
+
+    <select id="queryCourseIdByClassDate" resultType="java.lang.Long">
+        SELECT DISTINCT csts.course_schedule_id_
+        FROM course_schedule_teacher_salary csts
+                 LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+                 LEFT JOIN student_extracurricular_exercises_situation_ se ON se.teacher_id_ = csts.user_id_
+        WHERE csts.user_id_ = #{teacherId}
+          AND cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth}
+          AND FIND_IN_SET(cs.id_, se.course_ids_)
+          AND se.serve_type_ = 'HOMEWORK'
+    </select>
+
+    <select id="countWaitCreateHomeworkNum" resultType="java.lang.Integer">
+        SELECT COUNT(id_)
+        FROM student_extracurricular_exercises_situation_
+        WHERE teacher_id_ = #{teacherId}
+          AND expect_exercises_num_ > actual_exercises_num_
+          AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN monday_ AND sunday_
+          AND serve_type_ = 'EXERCISE'
+    </select>
+    <select id="countWaitCreateHomeworkNum1" resultType="java.lang.Integer">
+        SELECT SUM(t.num_)
+        FROM (
+                 SELECT COUNT(se.id_) num_
+                 FROM student_extracurricular_exercises_situation_ se
+                          LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_, se.course_ids_)
+                 WHERE se.teacher_id_ = #{teacherId}
+                   AND se.expect_exercises_num_ > se.actual_exercises_num_
+                   AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN se.monday_ AND se.sunday_
+                   AND se.serve_type_ = 'HOMEWORK'
+                   AND cs.group_type_ = 'MUSIC'
+                   AND cs.class_date_ = DATE_FORMAT(NOW(), '%Y-%m-%d')
+                 UNION ALL
+                 SELECT COUNT(se.id_) num_
+                 FROM student_extracurricular_exercises_situation_ se
+                          LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_, se.course_ids_)
+                 WHERE se.teacher_id_ = #{teacherId}
+                   AND se.expect_exercises_num_ > se.actual_exercises_num_
+                   AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN se.monday_ AND se.sunday_
+                   AND se.serve_type_ = 'HOMEWORK'
+                   AND cs.group_type_ != 'MUSIC' AND cs.class_date_ &lt;= DATE_FORMAT(NOW(), '%Y-%m-%d')) t
+    </select>
+
+    <select id="queryTeacherPerformanceIndicator" resultMap="TeacherServeDto">
+        SELECT
+        organ.name_ organ_name_,
+        sees.monday_,
+        sees.sunday_,
+        sees.teacher_id_,
+        su.real_name_ teacher_name_,
+        tea.job_nature_,
+        SUM(expect_exercises_num_) expect_exercises_num_,
+        SUM(actual_exercises_num_) actual_exercises_num_,
+        SUM(exercises_reply_num_) exercises_reply_num_,
+        SUM(exercises_message_num_) exercises_message_num_,
+        SUM(exercises_message_timely_num_) exercises_message_timely_num_,
+        SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
+        SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
+        SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
+        FROM
+        student_extracurricular_exercises_situation_ sees
+        LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+        LEFT JOIN organization organ ON organ.id_=tea.organ_id_
+        LEFT JOIN sys_user su ON tea.id_=su.id_
+        <include refid="queryTeacherServeInfoCondition"/>
+        GROUP BY sees.teacher_id_
+        ORDER BY sees.teacher_id_
+        <include refid="global.limit"></include>
+    </select>
+    <select id="getHomeworkSituations" resultType="java.util.Date">
+        SELECT cs.class_date_
+        FROM student_extracurricular_exercises_situation_ sees
+                 LEFT JOIN course_schedule cs ON FIND_IN_SET(cs.id_, sees.course_ids_)
+        WHERE sees.serve_type_ = #{serveType}
+          AND cs.id_ != #{courseScheduleId}
+          AND cs.music_group_id_ = #{musicGroupId}
+          AND sees.monday_ = #{month}
+          AND sees.student_id_ = #{userId}
+    </select>
+
+    <resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto">
+        <result column="student_id_" property="userId"/>
+        <result column="username_" property="username"/>
+        <result column="music_group_name_" property="musicGroupName"/>
+        <result column="organ_name_" property="organName"/>
+        <result column="serve_period_" property="servePeriod"/>
+        <result column="serve_num_" property="serveNum"/>
+        <result column="actual_exercises_num_" property="actualExercisesNum"/>
+        <result column="exercises_reply_num_" property="exercisesReplyNum"/>
+        <result column="exercises_message_num_" property="exercisesMessageNum"/>
+        <result column="sign_rate_" property="signRate"/>
+        <result column="pass_rate_" property="passRate"/>
+    </resultMap>
+
+    <!-- 还差出勤率和达标率 -->
+    <select id="queryStudentServeInfo" resultMap="StudentServeDto">
+        select
+            t.student_id_,
+            t.music_group_name_,
+            concat(#{params.startTime},'至', #{params.endTime}) as serve_period_,
+            t.username_,
+            t.organ_name_,
+            ifnull(sees.serve_num_,0) as serve_num_,
+            ifnull(sees.actual_exercises_num_,0) as actual_exercises_num_,
+            ifnull(sees.exercises_reply_num_,0) as exercises_reply_num_,
+            ifnull(sees.exercises_message_num_,0) as exercises_message_num_,
+            round(ifnull(a.sign_rate_,0) * 100,2) as sign_rate_,
+            round(ifnull(a.pass_rate_,0) * 100,2) as pass_rate_
+        from (
+            select
+                a.user_id_ as student_id_,
+                group_concat(distinct b.name_) as music_group_name_,
+                u.username_,
+                organ.name_ as organ_name_
+            from student_registration a
+            left join music_group b on a.music_group_id_ = b.id_
+            left join sys_user u ON a.user_id_ = u.id_
+            LEFT JOIN organization organ ON organ.id_=u.organ_id_ and organ.del_flag_ = 0
+            where payment_status_ = 2 and b.status_ = 'PROGRESS'
+            <if test="params.tenantId != null and params.tenantId > 0">
+                AND a.tenant_id_ = #{params.tenantId}
+            </if>
+            <if test="params.organId != null and params.organId != ''">
+                AND FIND_IN_SET(u.organ_id_,#{params.organId})
+            </if>
+            group by a.user_id_
+        ) t
+        left join
+        (
+            select
+                sees.student_id_,
+                sum(sees.expect_exercises_num_) as serve_num_,
+                sum(sees.actual_exercises_num_) as actual_exercises_num_,
+                sum(sees.exercises_reply_num_) as exercises_reply_num_,
+                sum(sees.exercises_message_num_) as exercises_message_num_
+            from student_extracurricular_exercises_situation_ sees
+            left join sys_user u ON sees.student_id_ = u.id_
+            <where>
+                <if test="params.tenantId != null and params.tenantId > 0">
+                    AND sees.tenant_id_ = #{params.tenantId}
+                </if>
+                <if test="params.startTime != null and params.startTime != ''">
+                    AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{params.startTime}
+                </if>
+                <if test="params.endTime != null and params.endTime != ''">
+                    AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{params.endTime}
+                </if>
+                <if test="params.organId != null and params.organId != ''">
+                    AND FIND_IN_SET(u.organ_id_,#{params.organId})
+                </if>
+            </where>
+            group by sees.student_id_
+        ) sees on t.student_id_ = sees.student_id_
+        left join (
+            select
+                cssp.user_id_,
+                ifnull(sum(if(sa.status_ in ('NORMAL','LATE'),1,0))/count(cs.id_),0) as sign_rate_,
+                ifnull(sum(sa.qualified_flag_)/count(cs.id_),0) as pass_rate_
+            from course_schedule cs
+            left join course_schedule_student_payment cssp on cs.id_ = cssp.course_schedule_id_
+            left join sys_user u ON cssp.user_id_ = u.id_
+            left join student_attendance sa on cssp.user_id_ = sa.user_id_ and cs.id_ = sa.course_schedule_id_
+            <where>
+                cs.del_flag_ = 0 and cs.is_lock_ = 0 AND cs.pre_course_flag_ = 0 AND cs.organ_id_ IS NOT NULL and cs.id_ is not null
+                and cs.group_type_ = 'MUSIC'
+                and (cs.new_course_id_ is null or cs.id_ = cs.new_course_id_)
+                <if test="params.tenantId != null and params.tenantId > 0">
+                    AND cs.tenant_id_ = #{params.tenantId}
+                </if>
+                <if test="params.startTime != null and params.startTime != ''">
+                    AND DATE_FORMAT(cs.class_date_, '%Y-%m-%d') &gt;= #{params.startTime}
+                </if>
+                <if test="params.endTime != null and params.endTime != ''">
+                    AND DATE_FORMAT(cs.class_date_, '%Y-%m-%d') &lt;= #{params.endTime}
+                </if>
+                <if test="params.organId != null and params.organId != ''">
+                    AND FIND_IN_SET(u.organ_id_,#{params.organId})
+                </if>
+            </where>
+            group by cssp.user_id_
+        ) a on sees.student_id_ = a.user_id_
+    </select>
 </mapper>

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

@@ -38,6 +38,7 @@
     <resultMap id="studentManageListDto" type="com.ym.mec.biz.dal.dto.StudentManageListDto">
         <result property="userId" column="user_id_"/>
         <result property="realName" column="real_name_"/>
+        <result property="avatar" column="avatar_"/>
         <result property="nation" column="nation_"/>
         <result property="parentsPhone" column="parents_phone_"/>
         <result property="parentsName" column="real_name_"/>
@@ -147,7 +148,7 @@
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT o.`name_` organ_name_,o.grade_type_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,s.ext_subject_ids_,
-        sut.name_ real_name_,su.`gender_` , su.organ_id_,
+        sut.name_ real_name_,su.`gender_` , su.organ_id_,su.avatar_,
 		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
         s.care_package_, s.come_on_package_, suca.`course_balance_` ,suca.balance_,
 		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,s.current_grade_num_,s.current_class_,s.member_rank_setting_id_,

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1447,6 +1447,18 @@
         <include refid="queryStudentBasicInfoSql"/>
         <include refid="global.limit"/>
     </select>
+    <select id="queryStuSubjectId" resultType="com.ym.mec.biz.dal.dto.BaseMapDto">
+        select sb.id_ 'key',sb.name_ 'value' from student s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        LEFT JOIN subject sb ON sb.id_ = s.subject_id_list_
+        <where>
+            s.subject_id_list_ IS NOT NULL
+            <if test="organIds != null and organIds != ''">
+                AND FIND_IN_SET(su.organ_id_,#{organIds})
+            </if>
+        </where>
+        GROUP BY sb.id_
+    </select>
     <sql id="queryStudentBasicInfoSql">
         <where>
             AND su.lock_flag_ = 0 AND su.del_flag_ = 0

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

@@ -1062,7 +1062,7 @@
         LIMIT 1
     </select>
     <select id="countByActivityIds" resultType="java.lang.Integer">
-        SELECT COUNT(0) FROM student_payment_order WHERE user_id_ = #{userId} AND activity_id_ IN
+        SELECT COUNT(0) FROM student_payment_order WHERE user_id_ = #{userId} AND status_ = 'SUCCESS' AND activity_id_ IN
         <foreach collection="activityIds" item="activityId" open="(" close=")" separator=",">
             #{activityId}
         </foreach>

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

@@ -327,12 +327,12 @@
 	</select>
 	<select id="queryStatistics" resultMap="StudentStatisticsDto">
 		SELECT *,ss.not_start_course_fee_ + ss.no_course_fee_ preCourseFee,
-		CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ &lt;= 0) THEN '在读'
-		WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ &lt;= 0 THEN '沉睡'
-		WHEN ss.over_course_num_ > 0 AND ss.sub_course_num_ &lt;= 0 AND ss.no_schedule_num_ &lt;= 0 AND suca.course_balance_ &lt;= 0 THEN '流失'
-		WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ &lt;= 0 AND ss.no_schedule_num_ &lt;= 0 THEN '暂停' ELSE '其他' END student_status_
-		,suca.course_balance_,
-		ss.last_visit_time_
+			CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ &lt;= 0) THEN '在读'
+			WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ &lt;= 0 THEN '沉睡'
+			WHEN ss.over_course_num_ > 0 AND ss.sub_course_num_ &lt;= 0 AND ss.no_schedule_num_ &lt;= 0 AND suca.course_balance_ &lt;= 0 THEN '流失'
+			WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ &lt;= 0 AND ss.no_schedule_num_ &lt;= 0 THEN '暂停' ELSE '其他' END student_status_
+			,suca.course_balance_,
+			ss.last_visit_time_
 		FROM student_basic_info sbi
 		LEFT JOIN student_statistics ss ON ss.user_id_ = sbi.user_id_
 		LEFT JOIN sys_user_cash_account suca ON sbi.user_id_ = suca.user_id_

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1496,5 +1496,11 @@
         </where>
 
     </select>
+    <select id="queryOrganList" resultType="com.ym.mec.biz.dal.dto.BaseMapDto">
+        select o.id_ 'key',o.name_ 'value' from organization o
+        left join (select CONCAT_WS(',',t.organ_id_,case when t.flow_organ_range_ = '' then null else t.flow_organ_range_ end) organ_id_ from teacher t
+        where t.id_ = #{userId} group by t.id_)c ON 1 = 1
+        where FIND_IN_SET(o.id_,c.organ_id_)
+    </select>
 
 </mapper>

+ 5 - 1
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -8,6 +8,8 @@ import com.ym.mec.biz.service.ImLiveRoomVideoService;
 import com.ym.mec.common.entity.ImRoomMessage;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.im.IMHelper;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import com.ym.pojo.IMApiResultInfo;
 import com.ym.pojo.IMUserOnlineInfo;
 import com.ym.pojo.RecordConfig;
@@ -40,6 +42,8 @@ public class LiveRoomServiceImpl implements LiveRoomService {
     private RedissonClient redissonClient;
     @Autowired
     private ImLiveRoomVideoService imLiveRoomVideoService;
+    @Autowired
+    private StoragePluginContext storagePluginContext;
 
     /**
      * 创建房间-聊天室
@@ -158,7 +162,7 @@ public class LiveRoomServiceImpl implements LiveRoomService {
         if (recordNotify.getCode().equals(200)) {
             if (Objects.nonNull(recordNotify.getType()) && recordNotify.getType() == 4) {
                 //云端录制文件地址
-                String fileUrl = recordNotify.getOutput().getFileUrl();
+                String fileUrl = storagePluginContext.getPublicUrl(recordNotify.getOutput().getFileUrl(),"live-rewind");
                 String roomId = recordNotify.getRoomId();
                 //写入数据库
                 try {

+ 1 - 0
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -34,6 +34,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 "/repair/getRepairInfo",
                 "/repair/payRepair",
                 "/degree/*",
+                "/getUploadSign",
                 "/practiceGroup/queryOrderInfo",
                 "/systemDate/query",
                 "/organization/getOrgans",

+ 5 - 42
mec-student/src/main/java/com/ym/mec/student/controller/ActivityController.java

@@ -16,8 +16,6 @@ import com.ym.mec.biz.service.MarketActivityService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.util.date.DateUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -109,46 +107,11 @@ public class ActivityController extends BaseController {
     @ApiOperation("获取2022云教练活动列表")
     @PostMapping(value = "/queryActivity")
     @AuditLogAnnotation(operateName = "获取2022云教练活动列表")
-    public HttpResponseResult<List<VipGroupActivity>> queryActivity() throws Exception {
-        return failed("购买入口已关闭,请联系管理员");
-//        SysUser user = sysUserFeignService.queryUserInfo();
-//        if (user == null) {
-//            return failed(HttpStatus.FORBIDDEN, "请登录");
-//        }
-//        Date nowTime = new Date();
-//        String startTimeStr = sysConfigDao.findConfigValue("2022_cloud_activity_start_time");
-//        Date startTime = DateUtil.stringToDate(startTimeStr);
-//        if (startTime.compareTo(nowTime) > 0) {
-//            throw new BizException("活动还未开始,谢谢关注");
-//        }
-//        String endTimeStr = sysConfigDao.findConfigValue("2022_cloud_activity_end_time");
-//        Date endTime = DateUtil.stringToDate(endTimeStr);
-//        if (endTime.compareTo(nowTime) <= 0) {
-//            throw new BizException("活动已结束,谢谢关注");
-//        }
-//        String configValue = sysConfigDao.findConfigValue("2022_cloud_activity_config");
-//        List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(configValue, Cloud2022ActivityDto.class);
-//        for (Cloud2022ActivityDto cloud2022ActivityDto : cloud2022ActivityDtos) {
-//            String[] split = cloud2022ActivityDto.getOrganId().split(",");
-//            long count = Arrays.stream(split).filter(e -> Objects.equals(e, user.getOrganId().toString())).count();
-//            if(count > 0l){
-//                List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(cloud2022ActivityDto.getActivityId());
-//                for (VipGroupActivity vipGroupActivity : vipGroupActivities) {
-//                    Integer studentMaxUsedTimes = vipGroupActivity.getStudentMaxUsedTimes();
-//                    if (studentMaxUsedTimes != -1) {
-//                        //获取活动购买次数
-//                        int activityBuyNum = activityUserMapperService.countActivityBuyNum(vipGroupActivity.getId(),user.getId());
-//                        //查看学员是否还可以购买活动
-//                        vipGroupActivity.setEnable(true);
-//                        if (activityBuyNum >= studentMaxUsedTimes) {
-//                            vipGroupActivity.setEnable(false);
-//                        }
-//                    }
-//                }
-//                return succeed(vipGroupActivities.stream().sorted(Comparator.comparing(VipGroupActivity::getMarketPrice)).collect(Collectors.toList()));
-//            }
-//        }
-//        return failed("当前分部不参与此活动,请联系管理员");
+    public HttpResponseResult<List<VipGroupActivity>> queryActivity(){
+        String configValue = sysConfigDao.findConfigValue("2022_cloud_activity_config");
+        List<Cloud2022ActivityDto> cloud2022ActivityDtos = JSONArray.parseArray(configValue, Cloud2022ActivityDto.class);
+        String collect = cloud2022ActivityDtos.stream().map(e -> e.getActivityId()).collect(Collectors.joining(","));
+        return succeed(vipGroupActivityDao.queryByIds(collect));
     }
 
     @ApiOperation(value = "学员已购买的双十一活动信息")

+ 8 - 12
mec-student/src/main/java/com/ym/mec/student/controller/StudentController.java

@@ -1,12 +1,13 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-
-import java.util.Date;
-
-import javax.annotation.Resource;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -14,12 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentPreRegistration;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.common.controller.BaseController;
+import javax.annotation.Resource;
+import java.util.Date;
 
 @RequestMapping("student")
 @Api(tags = "学生服务")
@@ -60,5 +57,4 @@ public class StudentController extends BaseController {
 		}
 		return succeed();
 	}
-
 }

+ 6 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseReviewController.java

@@ -16,7 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
+import java.util.Calendar;
 import java.util.List;
 import java.util.Objects;
 
@@ -113,6 +113,11 @@ public class CourseReviewController extends BaseController {
         if (Objects.isNull(sysUser)) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+        if(null == courseHomeworkInfo.getExpiryDate()){
+            Calendar instance = Calendar.getInstance();
+            instance.add(Calendar.WEEK_OF_MONTH,1);
+            courseHomeworkInfo.setExpiryDate(instance.getTime());
+        }
         return succeed(courseReviewService.addHomeWork(courseHomeworkInfo));
     }
 

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

@@ -103,6 +103,12 @@ public class ExtracurricularExercisesController extends BaseController {
         if(Objects.isNull(sysUser)){
             return failed(HttpStatus.FORBIDDEN,"请登录");
         }
+        if(null == exercises.getExpireDate()){
+            Calendar instance = Calendar.getInstance();
+            instance.add(Calendar.WEEK_OF_MONTH,1);
+            exercises.setExpireDate(instance.getTime());
+        }
+
         exercises.setTeacherId(sysUser.getId());
         extracurricularExercisesService.createExtraExercises(exercises);
         return succeed();

+ 25 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -1,15 +1,18 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.Optional;
 
 @Api(tags = "学生管理")
@@ -19,6 +22,10 @@ public class StudentController extends BaseController {
 
     @Autowired
     private SysUserCashAccountService sysUserCashAccountService;
+    @Resource
+    private SysUserService sysUserService;
+    @Autowired
+    private StudentManageService studentManageService;
 
     @ApiOperation(value = "获取学员账户信息")
     @GetMapping("/userCashAccount/get")
@@ -27,4 +34,19 @@ public class StudentController extends BaseController {
         return succeed(sysUserCashAccountService.get(id));
     }
 
+
+    @ApiOperation(value = "获取学生列表")
+    @PostMapping("/queryStudentList")
+    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
+        queryInfo.setTeacherId(sysUserService.getUserId());
+        queryInfo.setIsExport(false);
+        return succeed(studentManageService.findStudentsByOrganId(queryInfo));
+    }
+
+    @ApiOperation(value = "根据学生ID获取其所在的乐团")
+    @GetMapping("/findStudentMusicGroups")
+    public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
+        return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
+    }
+
 }

+ 23 - 76
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -1,37 +1,26 @@
 package com.ym.mec.teacher.controller;
 
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.PageInfoReg;
-import com.ym.mec.biz.dal.dto.RegisterDto;
-import com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto;
+import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.*;
+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.common.page.QueryInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
+import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.common.controller.BaseController;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @RequestMapping("teacher")
 @Api(tags = "教师服务")
@@ -47,12 +36,10 @@ public class TeacherController extends BaseController {
     @Autowired
     private ClassGroupService classGroupService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
 	@Autowired
 	private SubjectDao subjectDao;
 	@Autowired
-    private EmployeeService employeeService;
-	@Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
 	@Autowired
     private StudentRegistrationService studentRegistrationService;
@@ -60,24 +47,22 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "修改教师个人中心信息")
     @PostMapping("/update")
     public Object update(Teacher teacher) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
         teacher.setUpdateTime(new Date());
-        teacher.setId(sysUser.getId());
+        teacher.setId(sysUserService.getUserId());
         teacherService.updateTea1(teacher);
         return succeed();
     }
 
+    @ApiOperation(value = "获取老师分部列表(包含流动分部)")
+    @GetMapping("/queryOrganList")
+    public HttpResponseResult<List<BaseMapDto<Integer,String>>> queryOrganList() {
+        return succeed(teacherService.queryOrganList(sysUserService.getUserId()));
+    }
+
     @ApiOperation(value = "根据教师编号查询教师基本信息")
     @GetMapping("/queryUserInfo")
     public Object queryUserInfo() {
-    	SysUser user = sysUserFeignService.queryUserInfo();
-		if (user == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		Teacher teacher = teacherService.get(user.getId());
+		Teacher teacher = teacherService.get(sysUserService.getUserId());
 		//专业技能
 		if(StringUtils.isNotEmpty(teacher.getSubjectId())){
 			teacher.setSubjectName(subjectDao.findBySubIds(teacher.getSubjectId()));
@@ -115,31 +100,19 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取教师所有聊天群组")
     @GetMapping("/queryTeacherGroups")
     public Object queryTeacherGroups(String search){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        return succeed(teacherService.queryTeacherGroups(sysUser.getId(),search));
+        return succeed(teacherService.queryTeacherGroups(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "获取当前教师通讯录列表")
     @GetMapping("/queryGroupStudents")
     public Object queryGroupStudents(String search){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        return succeed(teacherService.queryGroupStudents(sysUser.getId(),search));
+        return succeed(teacherService.queryGroupStudents(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "获取当前教师通讯录学员列表")
     @GetMapping("/queryGroupStudentList")
     public Object queryGroupStudentList(String search){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        return succeed(teacherService.queryGroupStudentList(sysUser.getId(),search));
+        return succeed(teacherService.queryGroupStudentList(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "分页查询群公告列表")
@@ -181,32 +154,10 @@ public class TeacherController extends BaseController {
 			@ApiImplicitParam(name = "idcardBackImg", value = "身份证背面", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "idcardHandImg", value = "手持身份证照", required = true, dataType = "String") })
 	public Object realNameAuthentication(String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg) {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (user == null || user.getId() == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		teacherService.realNameAuthentication(user.getId(), realName, idcardNo, idcardFrontImg, idcardBackImg, idcardHandImg);
+		teacherService.realNameAuthentication(sysUserService.getUserId(), realName, idcardNo, idcardFrontImg, idcardBackImg, idcardHandImg);
 		return succeed();
 	}
 
-    /*@ApiOperation(value = "获取教务人员")
-    @GetMapping("/findEducationUsers")
-    public HttpResponseResult findEducationUsers(){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        String organIds = new String();
-        Teacher teacher = teacherService.get(sysUser.getId());
-        if (StringUtils.isEmpty(organIds)) {
-            organIds = teacher.getTeacherOrganId() + "";
-        }
-        if(StringUtils.isNotBlank(teacher.getFlowOrganRange())){
-            organIds = organIds + "," + teacher.getFlowOrganRange();
-        }
-        return succeed(employeeService.findByRole("4,5",organIds));
-    }*/
-
 
     @ApiOperation(value = "获取报名/预报名列表")
     @GetMapping("/getRegisterOrPreList")
@@ -224,11 +175,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "查询教师关联的乐团预览信息")
     @GetMapping("/queryTeacherMusicStudentOverView")
     public HttpResponseResult<PageInfo<TeacherMusicStudentOverViewDto>> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        queryInfo.setTeacherId(sysUser.getId());
+        queryInfo.setTeacherId(sysUserService.getUserId());
         return succeed(teacherService.queryTeacherMusicStudentOverView(queryInfo));
     }
 }

+ 12 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java

@@ -43,4 +43,16 @@ public interface StoragePlugin {
 	 * @return
 	 */
 	PostObjectFormFields getUploadSign(UploadSign uploadSign);
+
+	/**
+	 * @describe 设置文件访问为私有或公开
+	 * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+	 * @author zx
+	 * @date 2022/7/13
+	 * @time 11:35
+	 * @param fileName:
+	 * @param isPublic:
+	 * @return void
+	 */
+	void setFileAcl(String fileName,Boolean isPublic,String bucketName);
 }

+ 18 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java

@@ -6,6 +6,7 @@ import java.util.Map;
 
 import com.ksyun.ks3.dto.PostObjectFormFields;
 import com.ym.mec.thirdparty.entity.UploadSign;
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
@@ -37,6 +38,23 @@ public class StoragePluginContext {
 		return StoragePlugin.getUploadSign(uploadSign);
 	}
 
+	public void setFileAcl(String storagePluginName,String fileName,Boolean isPublic,String bucketName){
+		StoragePlugin storagePlugin = getStoragePlugin(storagePluginName);
+		storagePlugin.setFileAcl(fileName,isPublic,bucketName);
+	}
+
+	public String getPublicUrl(String fileName,String bucketName){
+		try {
+			String substring = fileName.substring(0, fileName.lastIndexOf("?"));
+			String substring1 = substring.substring(substring.lastIndexOf("/") + 1);
+			this.setFileAcl(KS3StoragePlugin.PLUGIN_NAME,substring1,true,bucketName);
+			return substring;
+		}catch (Exception e) {
+			e.printStackTrace();
+		}
+		return fileName;
+	}
+
 	private StoragePlugin getStoragePlugin(String storagePluginName) {
 		StoragePlugin storagePlugin = mapper.get(storagePluginName);
 

+ 6 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -169,6 +169,12 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 	}
 
 	@Override
+    @Override
+    public void setFileAcl(String fileName, Boolean isPublic,String bucketName) {
+		return;
+    }
+
+    @Override
 	public void destroy() throws Exception {
 		if (ossClient != null) {
 			ossClient.shutdown();

+ 14 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -8,6 +8,7 @@ import java.util.Map;
 
 import com.ksyun.ks3.dto.PostObjectFormFields;
 import com.ym.mec.thirdparty.entity.UploadSign;
+import com.ksyun.ks3.service.request.PutObjectACLRequest;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.util.IOUtils;
@@ -192,6 +193,19 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
 	}
 
 	@Override
+	public void setFileAcl(String fileName, Boolean isPublic,String bucketName) {
+		PutObjectACLRequest request = new PutObjectACLRequest(bucketName,fileName);
+		if (isPublic){
+			//设为公开读
+			request.setCannedAcl(CannedAccessControlList.PublicRead);
+		}else {
+			//设为私有
+			request.setCannedAcl(CannedAccessControlList.Private);
+		}
+		client.putObjectACL(request);
+	}
+
+	@Override
 	public void destroy() throws Exception {
 	}
 

+ 83 - 0
mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java

@@ -0,0 +1,83 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+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.common.page.QueryInfo;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * (HfMerchantConfig)表控制层
+ *
+ * @author hgw
+ * @since 2022-07-13 10:07:36
+ */
+@RestController
+@RequestMapping("/hfMerchantConfig")
+public class HfMerchantConfigController extends BaseController {
+    private static final Logger log = LoggerFactory.getLogger(HfMerchantConfigController.class);
+    /**
+     * 服务对象
+     */
+    @Resource
+    private HfMerchantConfigService hfMerchantConfigService;
+
+    @ApiOperation("创建汇付商户配置")
+    @PostMapping("/add")
+    public HttpResponseResult<Object> add(@RequestBody HfMerchantConfig dto) throws Exception {
+        long insert = hfMerchantConfigService.insert(dto);
+        if (insert == 1) {
+            MerConfig merConfig = new MerConfig();
+            merConfig.setApiKey(dto.getApiKey());
+            merConfig.setApiMockKey(dto.getMockApiKey());
+            merConfig.setRSAPrivateKey(dto.getRsaPrivateKey());
+            Adapay.addMerConfig(merConfig, dto.getMerKey());
+            MerConfig config = Adapay.getConfig(dto.getMerKey());
+            log.info("HfMerchantConfig in config:{}", JSONObject.toJSONString(config));
+            return succeed();
+        }
+        return failed("添加失败");
+    }
+
+    @ApiOperation("创建汇付商户配置")
+    @PostMapping("/update")
+    public HttpResponseResult<Object> update(@RequestBody HfMerchantConfig dto) throws Exception {
+        int update = hfMerchantConfigService.update(dto);
+        if (update == 1) {
+            MerConfig merConfig = new MerConfig();
+            merConfig.setApiKey(dto.getApiKey());
+            merConfig.setApiMockKey(dto.getMockApiKey());
+            merConfig.setRSAPrivateKey(dto.getRsaPrivateKey());
+            Adapay.addMerConfig(merConfig, dto.getMerKey());
+            MerConfig config = Adapay.getConfig(dto.getMerKey());
+            log.info("HfMerchantConfig up config:{}", JSONObject.toJSONString(config));
+            return succeed();
+        }
+        return failed("修改失败");
+    }
+
+    @ApiOperation("根据机构id查询汇付商户配置")
+    @GetMapping(value = "/queryByTenantId/{id}")
+    public HttpResponseResult<HfMerchantConfig> queryByTenantId(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
+        return succeed(hfMerchantConfigService.queryByTenantId(id));
+    }
+
+    @ApiOperation("分页查询汇付商户配置")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<HfMerchantConfig>> queryPage(@RequestBody QueryInfo dto) {
+        return succeed(hfMerchantConfigService.queryPage(dto));
+    }
+
+}
+

+ 3 - 6
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -16,10 +16,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -58,9 +55,9 @@ public class StudentManageController extends BaseController {
     }
 
     @ApiOperation(value = "获取学生列表")
-    @GetMapping("/queryStudentList")
+    @PostMapping("/queryStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentList')")
-    public Object queryStudentList(StudentManageQueryInfo queryInfo){
+    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setIsExport(false);
         return succeed(studentManageService.findStudentsByOrganId(queryInfo));

+ 18 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java

@@ -1,16 +1,21 @@
 package com.ym.mec.web.controller.education;
 
+import com.ym.mec.biz.dal.dto.BaseMapDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -33,6 +38,8 @@ public class EduStudentController extends BaseController {
     private StudentService studentService;
     @Autowired
     private OrganizationService organizationService;
+    @Autowired
+    private StudentManageService studentManageService;
 
     @ApiOperation(value = "云教练学员数据")
     @GetMapping("/organStudentData")
@@ -40,6 +47,12 @@ public class EduStudentController extends BaseController {
         return succeed(studentService.organStudentData(queryInfo));
     }
 
+    @ApiOperation(value = "根据学生ID获取其所在的乐团")
+    @GetMapping("/findStudentMusicGroups")
+    public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
+        return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
+    }
+
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     public HttpResponseResult<List<EduOrganStudentDataDto>> organStudentOverView() throws Exception {
@@ -51,4 +64,9 @@ public class EduStudentController extends BaseController {
         return succeed(studentService.organStudentOverView(organIds));
     }
 
+    @ApiOperation(value = "获取所选分部的学员声部列表")
+    @GetMapping("/queryStuSubjectId")
+    public HttpResponseResult<List<BaseMapDto>> queryStuSubjectId(){
+        return succeed(studentService.queryStuSubjectId(organizationService.getEmployeeOrgan(null)));
+    }
 }

+ 14 - 6
mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentStudentController.java

@@ -8,8 +8,7 @@ import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
-import com.ym.mec.biz.service.StudentManageService;
-import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiOperation;
 
@@ -19,11 +18,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
-import com.ym.mec.biz.service.StudentAttendanceService;
-import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 
 import java.util.Arrays;
@@ -46,6 +44,8 @@ public class EduStudentStudentController extends BaseController {
     @Autowired
     private StudentManageService studentManageService;
     @Autowired
+    private OrganizationService organizationService;
+    @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private EmployeeDao employeeDao;
@@ -77,8 +77,8 @@ public class EduStudentStudentController extends BaseController {
     }
 
     @ApiOperation(value = "获取学生列表")
-    @GetMapping("eduStudentManage/queryStudentList")
-    public Object queryStudentList(StudentManageQueryInfo queryInfo){
+    @PostMapping("eduStudentManage/queryStudentList")
+    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
@@ -111,4 +111,12 @@ public class EduStudentStudentController extends BaseController {
         return succeed(studentManageService.findStudentsByOrganId(queryInfo));
     }
 
+    @ApiOperation(value = "获取学生列表")
+    @PostMapping("eduStudentManage/queryStudentPage")
+    public Object queryStudentPage(@RequestBody StudentManageQueryInfo queryInfo){
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        queryInfo.setIsExport(false);
+        return succeed(studentManageService.findStudentsByOrganId(queryInfo));
+    }
+
 }

+ 15 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -88,4 +88,18 @@ ID = id
 学员姓名 = username
 活动编号 = activityId
 活动名称 = activityName
-剩余排课资格 = subCourseNum
+剩余排课资格 = subCourseNum
+剩余赠送排课资格 = subGiveCourseNum
+
+[乐团学生服务指标导出]
+编号 = userId
+姓名 = username
+乐团名称 = musicGroupName
+分部 = organName
+服务周期 = servePeriod
+服务指标总数 = serveNum
+已布置 = actualExercisesNum
+已提交数 = exercisesReplyNum
+点评数 = exercisesMessageNum
+出勤率 = signRate
+达标率 = passRate

+ 9 - 1
mec-web/src/main/resources/exportColumnMapper.ini

@@ -280,4 +280,12 @@ fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "
 
 [服务指标导出]
 headColumns = ["分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"]
-fieldColumns = ["organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum", "100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum", "100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"]
+fieldColumns = ["organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum", "100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum", "100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"]
+
+[活动资格导出]
+headColumns = ["分部","学员编号","学员姓名","活动编号","活动名称","剩余排课资格","剩余赠送排课资格"]
+fieldColumns = ["organizationName","userId","username","activityId","activityName", "subCourseNum","subGiveCourseNum"]
+
+[乐团学生服务指标导出]
+headColumns = ["编号","姓名","乐团名称","分部","服务周期","服务指标总数","已布置","已提交数","点评数","出勤率","达标率"]
+fieldColumns = ["userId","username","musicGroupName","organName","servePeriod", "serveNum","actualExercisesNum","exercisesReplyNum","exercisesMessageNum","signRate","passRate"]

Some files were not shown because too many files changed in this diff