Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 years ago
parent
commit
7bda7e1a21
30 changed files with 469 additions and 196 deletions
  1. 2 2
      codegen/src/main/resources/generateConfigration.xml
  2. 63 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/LoginEntity.java
  3. 3 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebSecurityConfig.java
  4. 29 20
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
  5. 36 12
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  6. 3 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserService.java
  7. 27 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  8. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  9. 8 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  10. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Group.java
  11. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SignInStatusEnum.java
  12. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SignOutStatusEnum.java
  13. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  14. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java
  16. 56 56
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  17. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java
  18. 16 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  19. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  20. 2 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkReplyServiceImpl.java
  21. 21 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  22. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  23. 6 8
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 50 15
      mec-biz/src/main/resources/config/mybatis/GroupMapper.xml
  25. 6 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  26. 23 17
      mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/RedisIdGeneratorService.java
  27. 1 0
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  28. 2 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  29. 9 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java
  30. 17 4
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 2 - 2
codegen/src/main/resources/generateConfigration.xml

@@ -8,10 +8,10 @@
 		<catalog>mec_data_online</catalog>
 		<schema>mec_data_online</schema>
 	</dbConfiguration>
-	<srcBase>d:/javabean</srcBase>
+	<srcBase>e:/javabean</srcBase>
 	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
 	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
 	<servicePackageName>com.ym.mec.biz.service</servicePackageName>
 	<sqlmapPackageName>resources</sqlmapPackageName>
 	<sqlmapConfigPackageName>resources/config</sqlmapConfigPackageName>
-</GenerateConfiguration>
+</GenerateConfiguration>

+ 63 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/LoginEntity.java

@@ -0,0 +1,63 @@
+package com.ym.mec.auth.api.entity;
+
+public class LoginEntity {
+    private String smsCode;
+
+    private String isLessee;
+
+    private String clientId;
+
+    private String clientSecret;
+
+    private String isRegister;
+
+    private String phone;
+
+    public String getIsRegister() {
+        return isRegister;
+    }
+
+    public void setIsRegister(String isRegister) {
+        this.isRegister = isRegister;
+    }
+
+    public String getSmsCode() {
+        return smsCode;
+    }
+
+    public void setSmsCode(String smsCode) {
+        this.smsCode = smsCode;
+    }
+
+    public String getIsLessee() {
+        return isLessee;
+    }
+
+    public void setIsLessee(String isLessee) {
+        this.isLessee = isLessee;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getClientSecret() {
+        return clientSecret;
+    }
+
+    public void setClientSecret(String clientSecret) {
+        this.clientSecret = clientSecret;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+}

+ 3 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebSecurityConfig.java

@@ -48,7 +48,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 		auth.authenticationProvider(daoAuthenticationProvider());
 		
 		PhoneAuthenticationProvider provider = phoneAuthenticationProvider();
-		provider.setSmsCodeService(smsCodeService);
+		provider.setSysUserService(sysUserService);
 		auth.authenticationProvider(provider);
 	}
 
@@ -100,7 +100,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
     	PhoneAuthenticationProvider provider = new PhoneAuthenticationProvider();
         // 设置userDetailsService
         provider.setUserDetailsService(defaultUserDetailsService);
-        //provider.setSmsCodeService(smsCodeService);
+        provider.setSmsCodeService(smsCodeService);
+        provider.setSysUserService(sysUserService);
 		// 禁止隐藏用户未找到异常
 		provider.setHideUserNotFoundExceptions(false);
 		

+ 29 - 20
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -1,9 +1,12 @@
 package com.ym.mec.auth.core.filter;
 
-import com.ym.mec.auth.api.dto.SysUserInfo;
-import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
-import com.ym.mec.auth.service.SysUserService;
-import com.ym.mec.common.security.SecurityConstants;
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.AuthenticationServiceException;
@@ -13,11 +16,11 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import com.ym.mec.auth.api.dto.SysUserInfo;
+import com.ym.mec.auth.api.entity.LoginEntity;
+import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 
 public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 
@@ -29,7 +32,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 
 	private static final String SPRING_SECURITY_RESTFUL_LOGIN_URL = "/smsLogin";
 	private boolean postOnly = true;
-	
+
 	private SysUserService sysUserService;
 
 	public PhoneLoginAuthenticationFilter() {
@@ -47,26 +50,32 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		String principal = obtainParameter(request, SPRING_SECURITY_RESTFUL_PHONE_KEY);
 		String credentials = obtainParameter(request, SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY);
 		String isRegister = obtainParameter(request, IS_REGISTER_PARAMETER);
-		//是否是租户
+		// 是否是租户
 		String isLessee = obtainParameter(request, IS_LESSEE);
 
-		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(principal);
-
 		String clientId = request.getParameter(clientIdParameter).toUpperCase();
-		if (userInfo == null) {
-			userInfo = sysUserService.initUser(principal,clientId,isRegister,isLessee);
-		}else if(StringUtils.isNotEmpty(isLessee)){
+
+		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(principal);
+		if (userInfo != null && StringUtils.isNotEmpty(isLessee)) {
 			throw new LockedException("用户已存在");
 		}
-		if("EDUCATION".equals(clientId)){
+		if ("EDUCATION".equals(clientId)) {
 			clientId = "SYSTEM";
 		}
-		if (!userInfo.getSysUser().getUserType().contains(clientId)) {
+		if (userInfo != null && !userInfo.getSysUser().getUserType().contains(clientId)) {
 			throw new LockedException("用户不存在,请联系教务老师");
 		}
 
 		principal = principal.trim();
-		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, credentials);
+
+		LoginEntity loginEntity = new LoginEntity();
+		loginEntity.setClientId(clientId);
+		loginEntity.setIsLessee(isLessee);
+		loginEntity.setPhone(principal);
+		loginEntity.setSmsCode(credentials);
+		loginEntity.setIsRegister(isRegister);
+
+		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);
 
 		// Allow subclasses to set the "details" property
 		setDetails(request, authRequest);
@@ -77,7 +86,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 	protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult)
 			throws IOException, ServletException {
 		super.successfulAuthentication(request, response, chain, authResult);
-		//chain.doFilter(request, response);
+		// chain.doFilter(request, response);
 	}
 
 	private void setDetails(HttpServletRequest request, AbstractAuthenticationToken authRequest) {

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

@@ -1,8 +1,5 @@
 package com.ym.mec.auth.core.provider;
 
-import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
-import com.ym.mec.common.security.SecurityConstants;
-import com.ym.mec.common.service.IdGeneratorService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.InternalAuthenticationServiceException;
@@ -11,29 +8,53 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.auth.api.dto.SysUserInfo;
+import com.ym.mec.auth.api.entity.LoginEntity;
+import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
+import com.ym.mec.common.service.IdGeneratorService;
 
 public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider {
 
 	private UserDetailsService userDetailsService;
 
 	private IdGeneratorService smsCodeService;
+
+	private SysUserService sysUserService;
+
 	@Override
 	protected void additionalAuthenticationChecks(UserDetails userDetails, Authentication authentication) throws AuthenticationException {
+
 		if (authentication.getCredentials() == null) {
 			throw new BadCredentialsException(this.messages.getMessage("PhoneAuthenticationProvider.badCredentials", "Bad credentials"));
-		} else {
-			String smsCode = authentication.getCredentials().toString();
-
-			String phone = authentication.getPrincipal().toString();
-
-			// 验证码验证
-			boolean b = smsCodeService.verifyValidCode(StringUtils.substringAfter(phone, SecurityConstants.PHONE_PRINCIPAL_PREFIX), smsCode);
-			if(!b) throw new BadCredentialsException("验证码校验失败");
 		}
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	protected UserDetails retrieveUser(String phone, Authentication authentication) throws AuthenticationException {
+
+		LoginEntity loginEntity = (LoginEntity) authentication.getCredentials();
+		if (loginEntity == null) {
+			throw new BadCredentialsException("Bad credentials");
+		}
+
+		String smsCode = loginEntity.getSmsCode();
+
+		// 验证码验证
+		boolean b = smsCodeService.verifyValidCode(StringUtils.substringAfter(phone, SecurityConstants.PHONE_PRINCIPAL_PREFIX), smsCode);
+		if (!b) {
+			throw new BadCredentialsException("验证码校验失败");
+		}
+
+		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(loginEntity.getPhone());
+		if (userInfo == null && StringUtils.isNotEmpty(loginEntity.getIsLessee())) {
+			sysUserService.initUser(loginEntity.getPhone(), loginEntity.getClientId(), loginEntity.getIsRegister(), loginEntity.getIsLessee());
+		}
+
 		UserDetails loadedUser;
 		try {
 			loadedUser = userDetailsService.loadUserByUsername(phone);
@@ -66,8 +87,11 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 		this.userDetailsService = userDetailsService;
 	}
 
+	public void setSysUserService(SysUserService sysUserService) {
+		this.sysUserService = sysUserService;
+	}
+
 	public void setSmsCodeService(IdGeneratorService smsCodeService) {
 		this.smsCodeService = smsCodeService;
 	}
-
 }

+ 3 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserService.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.security.core.Authentication;
 
 public interface SysUserService extends BaseService<Integer, SysUser> {
 
@@ -86,8 +87,8 @@ public interface SysUserService extends BaseService<Integer, SysUser> {
 
 	/**
 	 * 获取老师的分部编号
-	 * @param userId
+	 * @param phone
 	 * @return
 	 */
-	Integer getTeacherOrganId(Integer userId);
+	void retrieveUser(String phone, Authentication authentication);
 }

+ 27 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.auth.service.impl;
 
 import com.ym.mec.auth.api.dto.SysUserInfo;
+import com.ym.mec.auth.api.entity.LoginEntity;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
 import com.ym.mec.auth.dal.dao.SysUserDao;
@@ -11,12 +12,16 @@ import com.ym.mec.common.dal.BaseDAO;
 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.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.im.UserFeignService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.LockedException;
+import org.springframework.security.core.Authentication;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +44,10 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 	private ImFeignService imFeignService;
 	@Autowired
 	private UserFeignService userFeignService;
+	@Autowired
+	private SysUserService sysUserService;
+	@Autowired
+	private IdGeneratorService smsCodeService;
 
 	@Value("${message.autoRegister}")
 	private boolean autoRegister;
@@ -144,7 +153,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 			if(StringUtils.isNotEmpty(isLessee) && StringUtils.equalsIgnoreCase(clientId,"TEACHER")){
 				SysUser sysUser = new SysUser();
 				sysUser.setPhone(phone);
-				sysUser.setRealName("老师" + phone.substring(phone.length() - 6));
 				sysUser.setUserType("TEACHER");
 				sysUserDao.insert(sysUser);
 				//添加用户现金账户
@@ -158,7 +166,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 			}else if(StringUtils.isNotEmpty(isLessee) && StringUtils.equalsIgnoreCase(clientId,"STUDENT")){
 				SysUser sysUser = new SysUser();
 				sysUser.setPhone(phone);
-				sysUser.setUsername("学生" + phone.substring(phone.length() - 6));
 				sysUser.setUserType("STUDENT");
 				sysUser.setOrganId(lesseeOrganId);
 				sysUserDao.insert(sysUser);
@@ -172,8 +179,24 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 	}
 
 	@Override
-	public Integer getTeacherOrganId(Integer userId) {
-		return sysUserDao.getTeacherOrganId(userId);
+	@Transactional(rollbackFor = Exception.class)
+	public void retrieveUser(String phone, Authentication authentication) {
+		LoginEntity loginEntity = (LoginEntity) authentication.getCredentials();
+		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(loginEntity.getPhone());
+		if (userInfo == null) {
+			userInfo = sysUserService.initUser(loginEntity.getPhone(),loginEntity.getClientId(),loginEntity.getIsRegister(),loginEntity.getIsLessee());
+		}else if(StringUtils.isNotEmpty(loginEntity.getIsLessee())){
+			throw new LockedException("用户已存在");
+		}
+		if("EDUCATION".equals(loginEntity.getClientId())){
+			loginEntity.setClientId("SYSTEM");
+		}
+		if (!userInfo.getSysUser().getUserType().contains(loginEntity.getClientId())) {
+			throw new LockedException("用户不存在,请联系教务老师");
+		}
+//			 验证码验证
+		boolean b = smsCodeService.verifyValidCode(loginEntity.getPhone(), loginEntity.getSmsCode());
+		if(!b) throw new BadCredentialsException("验证码校验失败");
 	}
 
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -7,8 +7,8 @@ import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImUserModel;
 import org.apache.ibatis.annotations.Param;
+
 import java.math.BigDecimal;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -54,6 +54,8 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
     List<Map<Integer, String>> queryNameByIds(@Param("userIds") String userIds);
 
+    List<Map<Integer, String>> queryNameByIdList(@Param("userIds") List<Integer> userIds);
+
     /**
      * 根据用户编号列表获取手机号
      *

+ 8 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -1,7 +1,8 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.enums.SignAttendanceStatusEnum;
+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 java.util.Date;
@@ -26,9 +27,9 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private int isSignOut = 3;
 
-    private SignAttendanceStatusEnum signInStatusEnum;
+    private SignInStatusEnum signInStatusEnum;
 
-    private SignAttendanceStatusEnum signOutStatusEnum;
+    private SignOutStatusEnum signOutStatusEnum;
 
     private YesOrNoEnum isCallNames;
 
@@ -38,19 +39,19 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private String studentId;
 
-    public SignAttendanceStatusEnum getSignInStatusEnum() {
+    public SignInStatusEnum getSignInStatusEnum() {
         return signInStatusEnum;
     }
 
-    public void setSignInStatusEnum(SignAttendanceStatusEnum signInStatusEnum) {
+    public void setSignInStatusEnum(SignInStatusEnum signInStatusEnum) {
         this.signInStatusEnum = signInStatusEnum;
     }
 
-    public SignAttendanceStatusEnum getSignOutStatusEnum() {
+    public SignOutStatusEnum getSignOutStatusEnum() {
         return signOutStatusEnum;
     }
 
-    public void setSignOutStatusEnum(SignAttendanceStatusEnum signOutStatusEnum) {
+    public void setSignOutStatusEnum(SignOutStatusEnum signOutStatusEnum) {
         this.signOutStatusEnum = signOutStatusEnum;
     }
 

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Group.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
  * @Date 2019/12/30
  */
 public class Group {
+
     @ApiModelProperty(value = "编号")
     private String id;
 
@@ -23,6 +24,12 @@ public class Group {
     @ApiModelProperty(value = "团体类型")
     private GroupType groupType;
 
+    @ApiModelProperty(value = "班级编号")
+    private Integer classGroupId;
+
+    @ApiModelProperty(value = "班级名称")
+    private String classGroupName;
+
     public Group() {
     }
 
@@ -31,6 +38,22 @@ public class Group {
         this.groupType = groupType;
     }
 
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
     public Integer getOrganId() {
         return organId;
     }

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SignAttendanceStatusEnum.java → mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SignInStatusEnum.java

@@ -2,15 +2,15 @@ package com.ym.mec.biz.dal.enums;
 
 import com.ym.mec.common.enums.BaseEnum;
 
-public enum SignAttendanceStatusEnum implements BaseEnum<Integer, SignAttendanceStatusEnum> {
-    NORMAL(1,"正常"),
-    UNUSUAL(0,"异常"),
+public enum SignInStatusEnum implements BaseEnum<Integer, SignInStatusEnum> {
+    NORMAL(1,"正常签到"),
+    UNUSUAL(0,"异常签到"),
     NO(3,"未签到");
 
     private Integer code;
     private String msg;
 
-    SignAttendanceStatusEnum(Integer code, String msg) {
+    SignInStatusEnum(Integer code, String msg) {
         this.code = code;
         this.msg = msg;
     }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SignOutStatusEnum.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum SignOutStatusEnum implements BaseEnum<Integer, SignOutStatusEnum> {
+    NORMAL(1,"正常签退"),
+    UNUSUAL(0,"异常签退"),
+    NO(3,"未签退");
+
+    private Integer code;
+    private String msg;
+
+    SignOutStatusEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

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

@@ -152,6 +152,12 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @return
      */
     List<ImUserModel> findGroupUsers(Integer groupId,String search);
+    /**
+     * 获取群组下学员基本信息
+     * @param groupId
+     * @return
+     */
+    List<ImUserModel> findGroupStudents(Integer groupId,String search);
 
     /**
      * 分页查询学生购买记录

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

@@ -792,6 +792,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
+    public List<ImUserModel> findGroupStudents(Integer groupId,String search) {
+        return classGroupDao.findGroupUsers(groupId,search);
+    }
+
+    @Override
     public PageInfo<StudentPayInfoDto> queryStudentPayLog(StudentPayLogQueryInfo queryInfo) {
         PageInfo<StudentPayInfoDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();

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

@@ -236,7 +236,7 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
 
                         Map<Integer, String> userMap = new HashMap<>();
                         userMap.put(courseScheduleStudentPayment.getUserId(), courseScheduleStudentPayment.getUserId().toString());
-                        String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+                        String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId() + "&extra=0";
                         sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_REMIND,courseScheduleReview.getTeacherId().toString(),
                                                         new String[]{courseScheduleStudentPayment.getUserId().toString()},
                                                         null,courseSchedule.getName(), dateStr,courseHomework.getContent());

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

@@ -47,6 +47,8 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
+
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule> implements CourseScheduleService {
 
@@ -442,6 +444,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						}
 					}
 
+					if (!DateUtil.isSameDay(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime())) {
+						throw new BizException("上课时间不允许跨天,请重新调整上课时间");
+					}
+
 					courseSchedule.setTeacherId(teacherId);
 					courseSchedule.setActualTeacherId(teacherId);
 					courseSchedule.setCreateTime(now);
@@ -2213,6 +2219,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     courseSchedule.setClassDate(courseStartTime);
                     courseSchedule.setStartClassTime(courseStartTime);
                     courseSchedule.setEndClassTime(courseEndTime);
+
+					if (!DateUtil.isSameDay(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime())) {
+						throw new BizException("上课时间不允许跨天,请重新调整上课时间");
+					}
+					
                     if(vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)){
 						courseSchedule.setSchoolId(vipGroup.getTeacherSchoolId());
 					}
@@ -2347,6 +2358,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             	int minutes = DateUtil.minutesBetween(oldCourseSchedule.getStartClassTime(), oldCourseSchedule.getEndClassTime());
             	newCourseSchedule.setEndClassTime(DateUtil.addMinutes(newCourseSchedule.getStartClassTime(), minutes));
             }
+            //判断上课时间是否跨天
+			if (!DateUtil.isSameDay(newCourseSchedule.getStartClassTime(), newCourseSchedule.getEndClassTime())) {
+				throw new BizException("上课时间不允许跨天,请重新调整上课时间");
+			}
             if(Objects.isNull(newCourseSchedule.getClassGroupId())){
                 newCourseSchedule.setClassGroupId(oldCourseSchedule.getClassGroupId());
             }
@@ -3588,21 +3603,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>(16);
         MapUtil.populateMap(params, queryInfo);
-        if(StringUtils.isNotBlank(queryInfo.getTeacherName())){
-            List<TeacherBasicDto> teachers = teacherDao.searchTeachers(params);
-            if(!CollectionUtils.isEmpty(teachers)){
-                List<Integer> teacherIds = teachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
-                params.put("teacherIdList",StringUtils.join(teacherIds.toArray(),","));
-            }
-        }
-        Set<Integer> courseScheduleIdSet = new HashSet<>();
-        courseScheduleIdSet.addAll(courseScheduleDao.queryMusicCourseScheduleIds(params));
-        courseScheduleIdSet.addAll(courseScheduleDao.queryVipCourseScheduleIds(params));
-        courseScheduleIdSet.addAll(courseScheduleDao.queryPracticeCourseScheduleIds(params));
-        if(courseScheduleIdSet.size() == 0){
+
+		List<Group> groups = groupDao.searchGroups(params);
+
+        if(groups.size() <= 0){
             return pageInfo;
         }
-        params.put("courseScheduleIds", courseScheduleIdSet);
+        params.put("classGroupIds", groups.stream().map(Group::getClassGroupId).collect(Collectors.toSet()));
         List<CourseScheduleEndDto> results = new ArrayList<>();
         int count = courseScheduleDao.endCountCourseSchedules(params);
         if(queryInfo.getIsExport() && count > 50000){
@@ -3617,52 +3624,45 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
             Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
             Map<Long, String> studentIdMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.getStudentIdMap(courseScheduleIds));
-            List<Group> groups=new ArrayList<>();
-            groups.add(null);
-            List<Integer> teacherIds=new ArrayList<>();
-            for (CourseScheduleEndDto courseScheduleEndDto : results) {
-                Group group=new Group(courseScheduleEndDto.getMusicGroupId(),courseScheduleEndDto.getGroupType());
-                groups.add(group);
-                teacherIds.add(courseScheduleEndDto.getActualTeacherId());
-            }
-            List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIds(StringUtils.join(teacherIds,","));
+            List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
+
+            List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
             Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
-            groups = groupDao.findByGroupIds(groups);
-            Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
-            //获取班级声部名称
+
+			Map<Integer, Group> classGroupIdGroupMap = groups.stream().collect(Collectors.toMap(Group::getClassGroupId, e -> e));
+
+			//获取班级声部名称
             List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
             Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
-            results.forEach(result -> {
-                Map<GroupType, List<Group>> groupsTypeMap = groupsGroupByGroup.get(result.getMusicGroupId());
-                result.setTeacher(null);
-                if(Objects.nonNull(groupsTypeMap)){
-                    List<Group> groupTemps = groupsTypeMap.get(result.getGroupType());
-                    if(!CollectionUtils.isEmpty(groupTemps)){
-                        result.setGroupName(groupTemps.get(0).getGroupName());
-                        result.setOrganName(groupTemps.get(0).getOrganName());
-                    }
-                }
-                result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
-                result.setSubjectName(classGroupSubjectNameMap.get(result.getId()));
-                result.setStudentId(studentIdMap.get(result.getId()));
-                List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(result.getId());
-                if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
-                    TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
-                    result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
-                    result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
-					result.setSignInStatusEnum(result.getIsSignIn() == 1?SignAttendanceStatusEnum.NORMAL:result.getIsSignIn() == 0?SignAttendanceStatusEnum.UNUSUAL:SignAttendanceStatusEnum.NO);
-					result.setSignOutStatusEnum(result.getIsSignOut() == 1?SignAttendanceStatusEnum.NORMAL:result.getIsSignOut() == 0?SignAttendanceStatusEnum.UNUSUAL:SignAttendanceStatusEnum.NO);
-                    result.setSignInTime(teacherAttendance.getSignInTime());
-                    result.setSignOutTime(teacherAttendance.getSignOutTime());
-                    result.setRemark(teacherAttendance.getRemark());
-                }
-                Long studentNum = studentNumCourseMap.get(result.getId());
-                if (Objects.nonNull(studentNum)) {
-                    result.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-                } else {
-                    result.setIsCallNames(YesOrNoEnum.NO);
-                }
-            });
+			for (CourseScheduleEndDto result : results) {
+				Group group = classGroupIdGroupMap.get(result.getClassGroupId());
+				result.setTeacher(null);
+				if(Objects.nonNull(group)){
+					result.setGroupName(group.getGroupName());
+					result.setOrganName(group.getOrganName());
+					result.setClassGroupName(group.getClassGroupName());
+				}
+				result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
+				result.setSubjectName(classGroupSubjectNameMap.get(result.getId()));
+				result.setStudentId(studentIdMap.get(result.getId()));
+				List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(result.getId());
+				if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
+					TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
+					result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
+					result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
+					result.setSignInStatusEnum(result.getIsSignIn() == 1?NORMAL:result.getIsSignIn() == 0?UNUSUAL:NO);
+					result.setSignOutStatusEnum(result.getIsSignOut() == 1?SignOutStatusEnum.NORMAL:result.getIsSignOut() == 0? SignOutStatusEnum.UNUSUAL: SignOutStatusEnum.NO);
+					result.setSignInTime(teacherAttendance.getSignInTime());
+					result.setSignOutTime(teacherAttendance.getSignOutTime());
+					result.setRemark(teacherAttendance.getRemark());
+				}
+				Long studentNum = studentNumCourseMap.get(result.getId());
+				if (Objects.nonNull(studentNum)) {
+					result.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+				} else {
+					result.setIsCallNames(YesOrNoEnum.NO);
+				}
+			}
         }
         pageInfo.setRows(results);
         return pageInfo;

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

@@ -66,20 +66,20 @@ public class ExtracurricularExercisesMessageServiceImpl extends BaseServiceImpl<
 
 			Map<Integer, String> userMap = new HashMap<>();
 			userMap.put(extracurricularExercisesReply.getUserId(),extracurricularExercisesReply.getUserId().toString());
-			String notifyUrl = "3?courseScheduleID=" + extracurricularExercisesReply.getId() + "&studentCourseHomeworkId=" + extracurricularExercisesReply.getId();
+			String notifyUrl = "3?courseScheduleID=" + extracurricularExercisesReply.getId() + "&studentCourseHomeworkId=" + extracurricularExercisesReply.getId()+ "&extra=1";
 
 			sysMessageService.batchSendImMessage(MessageTypeEnum.EXTRA_TEACHER_REPLY_IM,extracurricularExercises.getTeacherId().toString(),
 					new String[]{extracurricularExercisesReply.getUserId().toString()},
 					null, extracurricularExercises.getTitle(), extracurricularExercisesMessage.getContent());
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.EXTRA_TEACHER_REPLY_PUSH,
 					userMap, null, 0, notifyUrl, "STUDENT", extracurricularExercises.getTitle());
-		}else{
+		}else if("STUDENT".equals(extracurricularExercisesMessage.getRole())&&Objects.nonNull(extracurricularExercisesReply.getAttachments())){
 			Map<Integer, String> userMap = new HashMap<>();
 			userMap.put(extracurricularExercises.getTeacherId(), extracurricularExercises.getTeacherId().toString());
 			SysUser user = teacherDao.getUser(extracurricularExercisesReply.getUserId());
 
 			String notifyUrl = "9?courseScheduleID=" + extracurricularExercisesReply.getId() +
-					"&userId=" + extracurricularExercisesReply.getUserId() + "&studentCourseHomeworkId=" + extracurricularExercisesReply.getId();
+					"&userId=" + extracurricularExercisesReply.getUserId() + "&studentCourseHomeworkId=" + extracurricularExercisesReply.getId()+ "&extra=1";
 			sysMessageService.batchSendImMessage(MessageTypeEnum.EXTRA_STUDENT_REPLY_IM,extracurricularExercisesReply.getUserId().toString(),
 					new String[]{extracurricularExercises.getTeacherId().toString()},
 					null,extracurricularExercises.getTitle(), extracurricularExercisesMessage.getContent());

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

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
@@ -75,7 +76,8 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		detail.setStatus(extraExerciseReply.getStatus()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
 		detail.setIsReplied(extraExerciseReply.getIsReplied()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
 		detail.setTeacherId(extraExerciseReply.getTeacherId());
-		detail.setTeacherName(extraExerciseReply.getTeacherName());
+		Teacher teacher = teacherDao.get(extraExerciseReply.getTeacherId());
+		detail.setTeacherName(teacher.getRealName());
 		detail.setStudentId(extraExerciseReply.getUserId());
 		detail.setStudentName(extraExerciseReply.getStudentName());
 		detail.setExpiryDate(extraExerciseReply.getExpireDate());
@@ -115,6 +117,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		if(Objects.isNull(existExtra)){
 			throw new BizException("作业不存在");
 		}
+		boolean push=Objects.isNull(existExtra.getAttachments());
 		ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(existExtra.getExtracurricularExercisesId());
 		if(Objects.isNull(extracurricularExercises)){
 			throw new BizException("作业不存在");
@@ -127,15 +130,17 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		extracurricularExercises.setCompletedNum(submitStudentNum);
 		extracurricularExercisesDao.update(extracurricularExercises);
 
-		Map<Integer, String> userMap = new HashMap<>();
-		userMap.put(extracurricularExercises.getTeacherId(), extracurricularExercises.getTeacherId().toString());
-		SysUser user = teacherDao.getUser(existExtra.getUserId());
-		String notifyUrl = "9?courseScheduleID=" + existExtra.getId() + "&userId=" + existExtra.getUserId() + "&studentCourseHomeworkId=" + existExtra.getId();
-		sysMessageService.batchSendImMessage(MessageTypeEnum.EXTRA_SUBMIT_IM,existExtra.getUserId().toString(),
-				new String[]{extracurricularExercises.getTeacherId().toString()},
-				null,extracurricularExercises.getTitle());
-		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.EXTRA_SUBMIT_PUSH,
-				userMap, null, 0, notifyUrl, "TEACHER",
-				extracurricularExercises.getTitle(), user.getUsername());
+		if(push){
+			Map<Integer, String> userMap = new HashMap<>();
+			userMap.put(extracurricularExercises.getTeacherId(), extracurricularExercises.getTeacherId().toString());
+			SysUser user = teacherDao.getUser(existExtra.getUserId());
+			String notifyUrl = "9?courseScheduleID=" + existExtra.getId() + "&userId=" + existExtra.getUserId() + "&studentCourseHomeworkId=" + existExtra.getId()+ "&extra=1";
+			sysMessageService.batchSendImMessage(MessageTypeEnum.EXTRA_SUBMIT_IM,existExtra.getUserId().toString(),
+					new String[]{extracurricularExercises.getTeacherId().toString()},
+					null,extracurricularExercises.getTitle());
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.EXTRA_SUBMIT_PUSH,
+					userMap, null, 0, notifyUrl, "TEACHER",
+					extracurricularExercises.getTitle(), user.getUsername());
+		}
 	}
 }

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java

@@ -54,12 +54,14 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 		if(StringUtils.isBlank(exercises.getContent())){
 			throw new BizException("请填写内容");
 		}
-		if(Objects.isNull(exercises.getExpireDate())){
-			throw new BizException("请指定截至日期");
-		}
 		if(StringUtils.isBlank(exercises.getStudentIdList())){
 			throw new BizException("请指定学生");
 		}
+		if(Objects.isNull(exercises.getExpireDate())){
+			LocalDateTime localDateTime=LocalDateTime.now();
+			localDateTime=localDateTime.plusDays(2).withHour(21).withMinute(0).withSecond(0);
+			exercises.setExpireDate(Date.from(localDateTime.atZone(DateUtil.zoneId).toInstant()));
+		}
 		List<Integer> studentIds = Arrays.asList(exercises.getStudentIdList().split(",")).stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
 		exercises.setBatchNo(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
 		exercises.setExpectNum(studentIds.size());
@@ -75,7 +77,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 			studentExtraExercise.setIsView(0);
 			extracurricularExercisesReplyDao.insert(studentExtraExercise);
 
-			String notifyUrl = "3?courseScheduleID=" + studentExtraExercise.getId() + "&studentCourseHomeworkId=" + studentExtraExercise.getId();
+			String notifyUrl = "3?courseScheduleID=" + studentExtraExercise.getId() + "&studentCourseHomeworkId=" + studentExtraExercise.getId() + "&extra=1";
 			sysMessageService.batchSendImMessage(MessageTypeEnum.EXTRA_REMIND_IM,exercises.getTeacherId().toString(),
 					new String[]{studentId.toString()},
 					null, exercises.getTitle(), dateStr,exercises.getContent());

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkReplyServiceImpl.java

@@ -13,7 +13,6 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -62,7 +61,7 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 		SysUser user = teacherDao.getUser(studentCourseHomework.getUserId());
 
 		String notifyUrl = "9?courseScheduleID=" + studentCourseHomework.getId() +
-				"&userId=" + studentCourseHomework.getUserId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+				"&userId=" + studentCourseHomework.getUserId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId() + "&extra=0";
 		String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
 		sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_STUDENT_REPLY_PUSH,studentCourseHomework.getUserId().toString(),
 				new String[]{courseSchedule.getActualTeacherId().toString()},
@@ -87,7 +86,7 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 		Map<Integer, String> userMap = new HashMap<>();
 		userMap.put(studentCourseHomework.getUserId(),studentCourseHomework.getUserId().toString());
 		SysUser user = teacherDao.get(courseSchedule.getTeacherId());
-		String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+		String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId() + "&extra=0";
 		String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
 		sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_TEACHER_REPLY_PUSH,courseSchedule.getTeacherId().toString(),
 				new String[]{studentCourseHomework.getUserId().toString()},

+ 21 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -7,13 +7,15 @@ import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.CourseHomework;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -81,9 +83,11 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void submitHomework(StudentCourseHomework bean) {
-        if (Objects.isNull(bean) || Objects.isNull(bean.getId())) {
+        StudentCourseHomework existHomework = studentCourseHomeworkDao.get(bean.getId());
+        if (Objects.isNull(bean) || Objects.isNull(bean.getId()) || Objects.isNull(existHomework)) {
             throw new BizException("作业不存在");
         }
+        boolean push = Objects.isNull(bean.getAttachments());
         super.update(bean);
         bean = studentCourseHomeworkDao.get(bean.getId());
         CourseSchedule courseSchedule = courseScheduleDao.get(bean.getCourseScheduleId());
@@ -101,17 +105,20 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
                 courseScheduleReviewDao.update(review);
             }
         }
-        Map<Integer, String> userMap = new HashMap<>();
-        userMap.put(courseSchedule.getActualTeacherId(), courseSchedule.getActualTeacherId().toString());
-        SysUser user = teacherDao.getUser(bean.getUserId());
-        String notifyUrl = "9?courseScheduleID=" + bean.getId() + "&userId=" + bean.getUserId() + "&studentCourseHomeworkId=" + bean.getId();
-        String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
-        sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_SUBMIT_PUSH,bean.getUserId().toString(),
-                new String[]{courseSchedule.getActualTeacherId().toString()},
-                null,courseDate,courseSchedule.getName());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_SUBMIT_PUSH,
-                userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), courseDate, user.getUsername());
-        courseHomeworkService.update(courseHomework);
+
+        if(push){
+            Map<Integer, String> userMap = new HashMap<>();
+            userMap.put(courseSchedule.getActualTeacherId(), courseSchedule.getActualTeacherId().toString());
+            SysUser user = teacherDao.getUser(bean.getUserId());
+            String notifyUrl = "9?courseScheduleID=" + bean.getId() + "&userId=" + bean.getUserId() + "&studentCourseHomeworkId=" + bean.getId() + "&extra=0";
+            String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
+            sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_SUBMIT_PUSH,bean.getUserId().toString(),
+                    new String[]{courseSchedule.getActualTeacherId().toString()},
+                    null,courseDate,courseSchedule.getName());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_SUBMIT_PUSH,
+                    userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), courseDate, user.getUsername());
+            courseHomeworkService.update(courseHomework);
+        }
     }
 
     @Override

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1102,7 +1102,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	}
 
 	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if(user == null){
@@ -1117,9 +1117,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("课程信息错误");
 		}
 
+		Date date=new Date();
+
         VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
 
-		if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
+		if(vipGroup.getPaymentExpireDate().before(date)){
 			throw new BizException("该课程已结束报名!");
 		}
 
@@ -1157,8 +1159,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}
 
-		Date date=new Date();
-
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
 		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
 

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

@@ -2222,10 +2222,11 @@
 
     <sql id="endFindCourseSchedulesCondition">
         <where>
-            <if test="courseScheduleIds != null">
-                AND cs.id_ IN
-                <foreach collection="courseScheduleIds" item="courseId" open="(" close=")" separator=",">
-                    #{courseId}
+            <include refid="queryVipCourseScheduleIds"/>
+            <if test="classGroupIds != null">
+                AND cs.class_group_id_ IN
+                <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+                    #{classGroupId}
                 </foreach>
             </if>
         </where>
@@ -2245,11 +2246,9 @@
         cs.teach_mode_,
         cs.type_,
         cs.schoole_id_,
-        cg.name_ class_group_name_,
         s.name_ schoole_name_
         FROM
         course_schedule cs
-        LEFT JOIN class_group cg ON cg.id_=cs.class_group_id_
         LEFT JOIN school s ON cs.schoole_id_=s.id_
         <include refid="endFindCourseSchedulesCondition"/>
         ORDER BY course_start_time_
@@ -2260,7 +2259,6 @@
         COUNT(cs.id_)
         FROM
         course_schedule cs
-        LEFT JOIN class_group cg ON cg.id_=cs.class_group_id_
         <include refid="endFindCourseSchedulesCondition"/>
     </select>
     <select id="findCourseIdsByStudent" resultType="int">
@@ -2358,7 +2356,7 @@
             AND cs.schoole_id_ = #{schoolId}
         </if>
         <if test="teacherIdList != null">
-            AND FIND_IN_SET(cs.actual_teacher_id_,#{teacherIdList})
+            AND cs.actual_teacher_id_=#{teacherIdList}
         </if>
     </sql>
     <select id="queryPracticeCourseScheduleIds" resultType="java.lang.Integer">

+ 50 - 15
mec-biz/src/main/resources/config/mybatis/GroupMapper.xml

@@ -9,9 +9,11 @@
     <resultMap type="com.ym.mec.biz.dal.entity.Group" id="Group">
         <result column="organ_id_" property="organId"/>
         <result column="organ_name_" property="organName"/>
-        <result column="id_" property="id"/>
+        <result column="group_id_" property="id"/>
         <result column="group_name_" property="groupName"/>
         <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="class_group_id_" property="classGroupId"/>
+        <result column="class_group_name_" property="classGroupName"/>
     </resultMap>
 
     <sql id="searchMusicGroupsCondition">
@@ -68,20 +70,53 @@
     </delete>
 
     <select id="searchGroups" resultMap="Group">
-        ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'MUSIC' group_type_
-        FROM music_group g
-        LEFT JOIN organization o ON g.organ_id_ = o.id_
-        <include refid="searchMusicGroupsCondition"/> )
-        UNION
-        ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'VIP' group_type_
-        FROM vip_group g
-        LEFT JOIN organization o ON g.organ_id_ = o.id_
-        <include refid="searchVipGroupsCondition"/> )
-        UNION
-        ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'PRACTICE' group_type_
-        FROM practice_group g
-        LEFT JOIN organization o ON g.organ_id_ = o.id_
-        <include refid="searchPracticeGroupsCondition"/> );
+        SELECT cg.music_group_id_ group_id_,cg.group_type_,cg.id_ class_group_id_,g.name_ group_name_,g.organ_id_,o.name_ organ_name_,cg.name_ class_group_name_
+        FROM	music_group g
+        LEFT JOIN class_group cg ON cg.music_group_id_=g.id_
+        LEFT JOIN organization o ON o.id_=g.organ_id_
+        WHERE cg.group_type_='MUSIC'
+        <if test="search!=null">
+            AND (g.name_ LIKE CONCAT( '%', #{search}, '%' ) OR g.id_ LIKE CONCAT( '%', #{search}, '%' ))
+        </if>
+        <if test="organIdList!=null">
+            AND FIND_IN_SET(g.organ_id_,#{organIdList})
+        </if>
+        UNION ALL
+        SELECT cg.music_group_id_ group_id_,cg.group_type_,cg.id_ class_group_id_,cg.name_ group_name_,g.organ_id_,o.name_ organ_name_,cg.name_ class_group_name_
+        FROM	vip_group g
+        LEFT JOIN class_group cg ON cg.music_group_id_=g.id_
+        LEFT JOIN organization o ON o.id_=g.organ_id_
+        WHERE cg.group_type_='VIP'
+        <if test="search!=null">
+            AND (g.name_ LIKE CONCAT( '%', #{search}, '%' ) OR g.id_ LIKE CONCAT( '%', #{search}, '%' ))
+        </if>
+        <if test="organIdList!=null">
+            AND FIND_IN_SET(g.organ_id_,#{organIdList})
+        </if>
+        UNION ALL
+        SELECT cg.music_group_id_ group_id_,cg.group_type_,cg.id_ class_group_id_,cg.name_ group_name_,g.organ_id_,o.name_ organ_name_,cg.name_ class_group_name_
+        FROM	practice_group g
+        LEFT JOIN class_group cg ON cg.music_group_id_=g.id_
+        LEFT JOIN organization o ON o.id_=g.organ_id_
+        WHERE cg.group_type_='PRACTICE'
+        <if test="search!=null">
+            AND (g.name_ LIKE CONCAT( '%', #{search}, '%' ) OR g.id_ LIKE CONCAT( '%', #{search}, '%' ))
+        </if>
+        <if test="organIdList!=null">
+            AND FIND_IN_SET(g.organ_id_,#{organIdList})
+        </if>
+        UNION ALL
+        SELECT cg.music_group_id_ group_id_,cg.group_type_,cg.id_ class_group_id_,cg.name_ group_name_,g.organ_id_,o.name_ organ_name_,cg.name_ class_group_name_
+        FROM courses_group g
+        LEFT JOIN class_group cg ON cg.music_group_id_=g.id_
+        LEFT JOIN organization o ON o.id_=g.organ_id_
+        WHERE cg.group_type_='COMM'
+        <if test="search!=null">
+            AND (g.name_ LIKE CONCAT( '%', #{search}, '%' ) OR g.id_ LIKE CONCAT( '%', #{search}, '%' ))
+        </if>
+        <if test="organIdList!=null">
+            AND FIND_IN_SET(g.organ_id_,#{organIdList})
+        </if>
     </select>
     <select id="findByGroupIds" resultMap="Group">
       ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'MUSIC' group_type_

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

@@ -294,6 +294,12 @@
     <select id="queryNameByIds" resultType="java.util.Map" parameterType="list">
         select id_ `key`,IF(real_name_ IS NUll,'',real_name_) `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds})
     </select>
+    <select id="queryNameByIdList" resultType="java.util.Map">
+        select id_ `key`,IF(real_name_ IS NUll,'',real_name_) `value` FROM sys_user s WHERE id_ IN
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+    </select>
 
     <select id="queryPhoneByIds" resultType="java.util.Map" parameterType="list">
         select id_ `key`,phone_ `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds}) AND s.phone_ IS NOT NULL

+ 23 - 17
mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/RedisIdGeneratorService.java

@@ -1,8 +1,8 @@
 package com.ym.mec.common.service.impl;
 
-import com.google.common.base.Strings;
-import com.ym.mec.common.redis.service.RedisCache;
-import com.ym.mec.common.service.IdGeneratorService;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -13,9 +13,9 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Service;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
+import com.google.common.base.Strings;
+import com.ym.mec.common.redis.service.RedisCache;
+import com.ym.mec.common.service.IdGeneratorService;
 
 @Service
 public class RedisIdGeneratorService implements IdGeneratorService {
@@ -24,8 +24,11 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 
 	private static final String keyPrefix = "smart";
 
+	private final String defaultPwd = "666666";
+
 	@Autowired
-	private RedisCache<String,Object> redisCache;
+	private RedisCache<String, Object> redisCache;
+
 	@Value("${message.debugMode}")
 	private boolean debugMode;
 
@@ -92,17 +95,20 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 
 	@Override
 	public boolean verifyValidCode(String mobile, String authCode) {
-		if(debugMode){
-			return debugMode;
-		}
-		String key = "verificationCodeSMS_VERIFY_CODE_LOGIN" + mobile;
-		Object object = redisCache.get(key);
-		log.info("*********************mobile:{} smsCode:{} inutCode:{}******************", key, object, authCode);
-		String verifyCode = object == null ? null : object.toString();
-		if(StringUtils.isNoneEmpty(verifyCode) && StringUtils.equalsIgnoreCase(verifyCode,authCode)){
-			return true;
+		if (debugMode) {
+			if (defaultPwd.equals(authCode)) {
+				return true;
+			}
+		} else {
+			String key = "verificationCodeSMS_VERIFY_CODE_LOGIN" + mobile;
+			Object object = redisCache.get(key);
+			log.info("*********************mobile:{} smsCode:{} inutCode:{}******************", key, object, authCode);
+			String verifyCode = object == null ? null : object.toString();
+			if (StringUtils.isNoneEmpty(verifyCode) && StringUtils.equalsIgnoreCase(verifyCode, authCode)) {
+				return true;
+			}
 		}
 		return false;
 	}
-	
+
 }

+ 1 - 0
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -1148,6 +1148,7 @@ public class RoomServiceImpl implements RoomService {
             SysUser sysUser = teacherDao.getUser(Integer.parseInt(userId));
             Teacher teacher = teacherDao.get(sysUser.getId());
             CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId.substring(1)));
+            log.info("statusSyncLevelRoom: roomId={}, userId={}", roomId, userId);
             try {
                 if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
                     teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId.substring(1)),Integer.parseInt(userId), SignStatusEnum.SIGN_OUT,true);

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

@@ -208,9 +208,9 @@ public class TeacherCourseScheduleController extends BaseController {
             }
         }
         
-        if (oldCourseSchedule.getGroupType().equals(GroupType.VIP)) {
+        /*if (oldCourseSchedule.getGroupType().equals(GroupType.VIP)) {
             vipGroupService.checkVipCourseIsInScore(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
-        }
+        }*/
         
         if(Objects.isNull(classDateAdjustDto.getClassGroupId())){
             classDateAdjustDto.setClassGroupId(oldCourseSchedule.getClassGroupId());

+ 9 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java

@@ -96,6 +96,15 @@ public class TeacherManageController extends BaseController {
         return succeed(classGroupService.findGroupUsers(groupId,search));
     }
 
+    @ApiOperation(value = "根据群编号,获取群组所有学员基本信息")
+    @GetMapping("classGroup/findGroupStudents")
+    public Object findGroupStudents(Integer groupId,String search) {
+        if (groupId == null) {
+            return failed("参数校验错误");
+        }
+        return succeed(classGroupService.findGroupStudents(groupId,search));
+    }
+
     @ApiOperation(value = "获取用户账户信息")
     @GetMapping("userCashAccount/get")
     public Object add() {

+ 17 - 4
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -16,8 +16,10 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +30,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.IOException;
+import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -288,6 +292,7 @@ public class ExportController extends BaseController {
             }
         }
         List<CourseScheduleEndDto> rows = scheduleService.endFindCourseSchedules(queryInfo).getRows();
+        OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "课程编号", "开始时间", "结束时间",
                     "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
@@ -297,12 +302,20 @@ public class ExportController extends BaseController {
                     "signOutTime","signInStatusEnum.msg","signOutStatusEnum.msg", "remark"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            response.flushBuffer();
-            workbook.write(response.getOutputStream());
-            workbook.close();
+            ouputStream = response.getOutputStream();
+			workbook.write(ouputStream);
+			ouputStream.flush();
         } catch (Exception e) {
             e.printStackTrace();
-        }
+        } finally {
+			if (ouputStream != null) {
+				try {
+					ouputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
     }