Browse Source

Merge remote-tracking branch 'origin/saas' into saas

yanite 3 năm trước cách đây
mục cha
commit
9d1b66bba3
25 tập tin đã thay đổi với 203 bổ sung170 xóa
  1. 6 5
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/dto/SysUserInfo.java
  2. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebSecurityConfig.java
  3. 33 51
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
  4. 20 43
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
  5. 0 8
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java
  6. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleMenuDao.java
  7. 2 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysRoleMenuService.java
  8. 2 13
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleMenuServiceImpl.java
  9. 4 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  10. 8 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysRoleMenuMapper.xml
  11. 7 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserRoleMapper.xml
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  13. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseSchedulePlanDto.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  15. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  17. 8 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  18. 4 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  19. 6 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  20. 2 2
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  21. 2 2
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  22. 2 2
      mec-common/common-core/src/main/java/com/ym/mec/common/security/SecurityConstants.java
  23. 22 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseScheduleController.java
  24. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/SysMessageController.java
  25. 10 0
      mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

+ 6 - 5
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/dto/SysUserInfo.java

@@ -1,9 +1,10 @@
 package com.ym.mec.auth.api.dto;
 
-import java.io.Serializable;
-
 import com.ym.mec.auth.api.entity.SysUser;
 
+import java.io.Serializable;
+import java.util.List;
+
 public class SysUserInfo implements Serializable {
 
 	/**
@@ -23,7 +24,7 @@ public class SysUserInfo implements Serializable {
 	/**
 	 * 角色集合
 	 */
-	private String[] roles;
+	private List<String> roles;
 
 	public SysUser getSysUser() {
 		return sysUser;
@@ -41,11 +42,11 @@ public class SysUserInfo implements Serializable {
 		this.permissions = permissions;
 	}
 
-	public String[] getRoles() {
+	public List<String> getRoles() {
 		return roles;
 	}
 
-	public void setRoles(String[] roles) {
+	public void setRoles(List<String> roles) {
 		this.roles = roles;
 	}
 }

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

@@ -63,7 +63,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 		http.formLogin().loginPage("/loginIn").loginPage("/smsLogin").and()
 			.addFilterBefore(getUsernameAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
 			.addFilterBefore(getPhoneLoginAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
-				//.exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()// 当未登录访问资源时
 				// 请求授权
 				.authorizeRequests()// 不需要权限认证的url
 				.antMatchers("/usernameLogin","/smsLogin", "/refreshToken", "/v2/api-docs").permitAll()// 任何请求
@@ -74,7 +73,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
 	@Override
 	public void configure(WebSecurity web) throws Exception {
-		web.ignoring().antMatchers("/usernameLogin", "/smsLogin", "/refreshToken", "/v2/api-docs","/loginIn","/user/updatePassword");
+		web.ignoring().antMatchers("/usernameLogin", "/smsLogin", "/refreshToken",
+				"/v2/api-docs","/loginIn","/user/updatePassword");
 	}
 
 	@Bean

+ 33 - 51
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -1,15 +1,19 @@
 package com.ym.mec.auth.core.filter;
 
 import java.io.IOException;
+import java.util.Map;
+import java.util.function.BiFunction;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.authentication.InternalAuthenticationServiceException;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
@@ -20,23 +24,9 @@ import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
 import com.ym.mec.common.security.SecurityConstants;
 
 public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
-
-	private static final String SPRING_SECURITY_RESTFUL_PHONE_KEY = "phone";
-	private static final String SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY = "smsCode";
-	private static final String clientIdParameter = "clientId";
-	private static final String IS_LESSEE = "isLessee";
-
-	private static final String TENANT_ID = "tenantId";
-
-	private static final String ORGAN_ID = "organId";
-	
-	private static final String DEVICE_NUM = "deviceNum";
-
-	private static final String SPRING_SECURITY_RESTFUL_LOGIN_URL = "/smsLogin";
 	private boolean postOnly = true;
-
 	public PhoneLoginAuthenticationFilter() {
-		super(new AntPathRequestMatcher(SPRING_SECURITY_RESTFUL_LOGIN_URL, "POST"));
+		super(new AntPathRequestMatcher("/smsLogin", "POST"));
 	}
 
 	@Override
@@ -44,30 +34,43 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		if (postOnly && !request.getMethod().equals("POST")) {
 			throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
 		}
+		//拼装请求参数
+		LoginEntity loginEntity = getLoginEntity(request);
+		AbstractAuthenticationToken authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + loginEntity.getPhone(), loginEntity);
+		// Allow subclasses to set the "details" property
+		authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
+		return this.getAuthenticationManager().authenticate(authRequest);
+	}
+
+	@Override
+	protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult)
+			throws IOException, ServletException {
+		super.successfulAuthentication(request, response, chain, authResult);
+		// chain.doFilter(request, response);
+	}
 
-		AbstractAuthenticationToken authRequest;
+	private String obtainParameter(HttpServletRequest request, String parameter) {
+		String result = request.getParameter(parameter);
+		return result == null ? "" : result;
+	}
+
+	private LoginEntity getLoginEntity(HttpServletRequest request){
 		// 手机验证码登陆
-		String principal = obtainParameter(request, SPRING_SECURITY_RESTFUL_PHONE_KEY);
-		String credentials = obtainParameter(request, SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY);
+		String principal = obtainParameter(request, "phone");
+		String credentials = obtainParameter(request, "smsCode");
 		// 是否是租户
-		String isLessee = obtainParameter(request, IS_LESSEE);
-		
-		String tenantId = obtainParameter(request, TENANT_ID);
-		
-		String organId = obtainParameter(request, ORGAN_ID);
-
+		String isLessee = obtainParameter(request, "isLessee");
+		String tenantId = obtainParameter(request, "tenantId");
+		String organId = obtainParameter(request, "organId");
 		boolean isRegister = StringUtils.equals("1", isLessee) || StringUtils.equals("true", isLessee);
 
-		String clientId = request.getParameter(clientIdParameter).toUpperCase();
-
+		String clientId = request.getParameter("clientId").toUpperCase();
 		if ("EDUCATION".equals(clientId)) {
 			clientId = "SYSTEM";
 		}
-		
-		String deviceNum = request.getParameter(DEVICE_NUM);
+		String deviceNum = request.getParameter("deviceNum");
 
 		principal = principal.trim();
-
 		LoginEntity loginEntity = new LoginEntity();
 		loginEntity.setClientId(clientId);
 		loginEntity.setPhone(principal);
@@ -78,28 +81,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		if(StringUtils.isNotEmpty(tenantId)){
 			loginEntity.setTenantId(Integer.parseInt(tenantId));
 		}
-
-		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);
-
-		// Allow subclasses to set the "details" property
-		setDetails(request, authRequest);
-		return this.getAuthenticationManager().authenticate(authRequest);
-	}
-
-	@Override
-	protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult)
-			throws IOException, ServletException {
-		super.successfulAuthentication(request, response, chain, authResult);
-		// chain.doFilter(request, response);
-	}
-
-	private void setDetails(HttpServletRequest request, AbstractAuthenticationToken authRequest) {
-		authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
-	}
-
-	private String obtainParameter(HttpServletRequest request, String parameter) {
-		String result = request.getParameter(parameter);
-		return result == null ? "" : result;
+		return loginEntity;
 	}
 
 }

+ 20 - 43
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java

@@ -1,14 +1,9 @@
 package com.ym.mec.auth.core.filter;
 
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.ym.mec.auth.core.handler.TenantNotFoundException;
-import com.ym.mec.common.exception.BizException;
+import com.ym.mec.auth.api.dto.SysUserInfo;
+import com.ym.mec.auth.service.SysUserDeviceService;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.LockedException;
@@ -20,10 +15,11 @@ import org.springframework.security.web.authentication.AbstractAuthenticationPro
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 import org.springframework.util.Assert;
 
-import com.ym.mec.auth.api.dto.SysUserInfo;
-import com.ym.mec.auth.service.SysUserDeviceService;
-import com.ym.mec.auth.service.SysUserService;
-import com.ym.mec.common.security.SecurityConstants;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 public class UsernameAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 
@@ -57,54 +53,35 @@ public class UsernameAuthenticationFilter extends AbstractAuthenticationProcessi
 
 		String username = obtainUsername(request);
 		String password = obtainPassword(request);
-		if (username == null) {
-			username = "";
-		}
-
-		if (password == null) {
-			password = "";
+		if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
+			throw new UsernameNotFoundException("404.9");
 		}
 
-		username = username.trim();
-		password = password.trim();
-
 		SysUserInfo userInfo = sysUserService.queryUserInfoByUsername(username);
-
-		String clientId = request.getParameter(clientIdParameter).toUpperCase();
-
 		if (userInfo == null) {
 			throw new UsernameNotFoundException("404.9");
 		}
-		Integer tenantId = userInfo.getSysUser().getTenantId();
-		if (tenantId == null || tenantId == 0) {
-			throw new TenantNotFoundException("机构信息异常,请联系管理员");
-		}
-	
-//		if (userInfo.getSysUser().getUserType() != SysUserType.SYSTEM && !StringUtils.equalsIgnoreCase(clientId, userInfo.getSysUser().getUserType().getCode())) {
-//			throw new LockedException("登录失败");
-//		}
+
+		String clientId = request.getParameter(clientIdParameter).toUpperCase();
 		if("EDUCATION".equals(clientId)){
 			clientId = "SYSTEM";
 		}
 		if (!userInfo.getSysUser().getUserType().contains(clientId)) {
 			throw new LockedException("用户不存在,请联系教务老师");
 		}
+		// 检查设备
+		String deviceNum = request.getParameter(deviceNumParameter);
+		if (StringUtils.isNotBlank(deviceNum)) {
+			sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
+		}
 
 		UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(SecurityConstants.USERNAME_PRINCIPAL_PREFIX + username,
 				password);
 
 		// Allow subclasses to set the "details" property
-		setDetails(request, authRequest);
-		
-		Authentication authentication = this.getAuthenticationManager().authenticate(authRequest);
+		authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
 		
-		String deviceNum = request.getParameter(deviceNumParameter);
-		if (StringUtils.isNotBlank(deviceNum)) {
-			// 检查设备
-			sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
-		}
-
-		return authentication;
+		return this.getAuthenticationManager().authenticate(authRequest);
 	}
 
 	@Override

+ 0 - 8
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java

@@ -55,16 +55,8 @@ public class AuthenticationFailureListener implements ApplicationListener<Authen
                 userLogin.setLastLoginIp(hashMap.get("remoteAddress"));
                 sysUserLoginService.insert(userLogin);
             }else {
-//                userLogin.setFailCount(userLogin.getFailCount() + 1);
                 userLogin.setLastLoginTime(date);
                 userLogin.setLastLoginIp(hashMap.get("remoteAddress"));
-                /*if(userLogin.getFailCount() >= 5){
-                    userLogin.setLockTime(30);
-                    userLogin.setLockDate(date);
-                    sysUser.setLockFlag(9);
-                    sysUser.setUpdateTime(date);
-                    sysUserService.update(sysUser);
-                }*/
                 sysUserLoginService.update(userLogin);
             }
             logger.info("用户:{} 登录失败", sysUser.getPhone());

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysRoleMenuDao.java

@@ -10,10 +10,10 @@ public interface SysRoleMenuDao extends BaseDAO<Integer, SysRoleMenu> {
 
 	/**
 	 * 根据角色查询权限列表
-	 * @param roleId
+	 * @param userId
 	 * @return
 	 */
-	List<String> queryPermissionsByRoleId(Integer roleId);
+	List<String> queryPermissionsByRoleId(Integer userId);
 
 	/**
 	 * 根据角色查询权限列表

+ 2 - 9
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysRoleMenuService.java

@@ -9,17 +9,10 @@ public interface SysRoleMenuService extends BaseService<Integer, SysRoleMenu> {
 
 	/**
 	 * 根据角色查询权限列表
-	 * @param roleId
-	 * @return
-	 */
-	List<String> queryPermissionsByRoleId(Integer roleId);
-
-	/**
-	 * 根据角色查询权限列表
-	 * @param roleIdList
+	 * @param userId
 	 * @return
 	 */
-	List<String> queryPermissionsByRoleIdList(List<Integer> roleIdList);
+	List<String> queryPermissionsByRoleIdList(Integer userId);
 
 	/**
 	 * 角色添加菜单访问权限

+ 2 - 13
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleMenuServiceImpl.java

@@ -24,19 +24,8 @@ public class SysRoleMenuServiceImpl extends BaseServiceImpl<Integer, SysRoleMenu
 	}
 
 	@Override
-	public List<String> queryPermissionsByRoleId(Integer roleId) {
-		return sysRoleMenuDao.queryPermissionsByRoleId(roleId);
-	}
-
-	@Override
-	public List<String> queryPermissionsByRoleIdList(List<Integer> roleIdList) {
-
-		List<String> list = new ArrayList<String>();
-
-		for (Integer roleId : roleIdList) {
-			list.addAll(queryPermissionsByRoleId(roleId));
-		}
-		return list;
+	public List<String> queryPermissionsByRoleIdList(Integer userId) {
+		return sysRoleMenuDao.queryPermissionsByRoleId(userId);
 	}
 
 	@Override

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

@@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -87,15 +88,9 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 		}
 		SysUserInfo userInfo = new SysUserInfo();
 		userInfo.setSysUser(sysUser);
-
-		List<String> roleCodeList = sysUserRoleService.queryRoleCodeListByUserId(sysUser.getId());
-		userInfo.setRoles(roleCodeList.toArray(new String[roleCodeList.size()]));
-
-		List<Integer> roleIdList = sysUserRoleService.queryRoleIdListByUserId(sysUser.getId());
-		List<String> permissionList = sysRoleMenuService.queryPermissionsByRoleIdList(roleIdList);
-
-		userInfo.setPermissions(permissionList.toArray(new String[permissionList.size()]));
-
+		List<String> permissionList = sysRoleMenuService.queryPermissionsByRoleIdList(sysUser.getId());
+		String[] strArray = permissionList.toArray(new String[permissionList.size()]);
+		userInfo.setPermissions(strArray);
 		return userInfo;
 	}
 

+ 8 - 2
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysRoleMenuMapper.xml

@@ -57,10 +57,16 @@
 	</select>
 	
 	<select id="queryPermissionsByRoleId" resultType="string" parameterType="int">
-		SELECT m.permission_ FROM sys_role_menu rm left join sys_menu m on rm.menu_id_ = m.id_ where rm.role_id_ = #{roleId} and m.del_flag_ = 0
+		SELECT m.permission_ FROM sys_role_menu rm
+									  LEFT JOIN sys_menu m ON rm.menu_id_ = m.id_
+		WHERE rm.role_id_ IN (SELECT ur.role_id_ FROM sys_user_role ur
+														  LEFT JOIN sys_role r ON ur.role_id_ = r.id_
+							  WHERE ur.user_id_ = #{userId} AND r.del_flag_ = 0) AND m.del_flag_ = 0
 	</select>
 
 	<select id="queryMenuIdByRoleId" resultType="integer" parameterType="int">
-		SELECT m.id_ FROM sys_role_menu rm left join sys_menu m on rm.menu_id_ = m.id_ where rm.role_id_ = #{roleId} and m.del_flag_ = 0
+		SELECT m.id_ FROM sys_role_menu rm
+		LEFT JOIN sys_menu m ON rm.menu_id_ = m.id_
+		WHERE rm.role_id_ = #{roleId} AND m.del_flag_ = 0
 	</select>
 </mapper>

+ 7 - 2
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserRoleMapper.xml

@@ -50,10 +50,15 @@
 	</select>
 
     <select id="queryRoleIdListByUserId" resultType="int" parameterType="int">
-		SELECT ur.role_id_ FROM sys_user_role ur left join sys_role r on ur.role_id_ = r.id_ where ur.user_id_ = #{userId} and r.del_flag_ = 0
+		SELECT ur.role_id_ FROM sys_user_role ur
+		LEFT JOIN sys_role r ON ur.role_id_ = r.id_
+		WHERE ur.user_id_ = #{userId} AND r.del_flag_ = 0
 	</select>
 
     <select id="queryRoleCodeListByUserId" resultType="string" parameterType="int">
-		SELECT r.role_code_ FROM sys_user_role ur left join sys_role r on ur.role_id_ = r.id_ where ur.user_id_ = #{userId} and r.del_flag_ = 0
+		SELECT r.role_code_ FROM sys_user_role ur
+		LEFT JOIN sys_role r ON ur.role_id_ = r.id_
+		WHERE ur.user_id_ = #{userId} AND r.del_flag_ = 0
+		AND r.role_code_ IS NOT NULL
 	</select>
 </mapper>

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

@@ -1248,7 +1248,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author Joburgess
      * @date 2020/2/4
      */
-    List<CourseSchedule> findStudentCoursesWithIncludeDateRange(@Param("userId") Integer userId,
+    List<CourseSchedule> findStudentCoursesWithIncludeDateRange(@Param("userId") Integer userId,@Param("groupType") GroupType groupType,
                                                                 @Param("startTime") Date startTime,
                                                                 @Param("endTime") Date endTime);
 

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseSchedulePlanDto.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.MusicGroupTrainPlan;
+
+public class CourseSchedulePlanDto {
+
+	private CourseSchedule courseSchedule;
+	
+	private MusicGroupTrainPlan musicGroupTrainPlan;
+
+	public CourseSchedule getCourseSchedule() {
+		return courseSchedule;
+	}
+
+	public void setCourseSchedule(CourseSchedule courseSchedule) {
+		this.courseSchedule = courseSchedule;
+	}
+
+	public MusicGroupTrainPlan getMusicGroupTrainPlan() {
+		return musicGroupTrainPlan;
+	}
+
+	public void setMusicGroupTrainPlan(MusicGroupTrainPlan musicGroupTrainPlan) {
+		this.musicGroupTrainPlan = musicGroupTrainPlan;
+	}
+}

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

@@ -651,4 +651,6 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	* @date 2022/1/5 15:52
 	*/
 	void checkOnlineCategory(List<CourseSchedule> courseSchedules,TeachModeEnum teachMode);
+	
+	Object queryMusicCoursePlan(Integer userId, Date startDate, Date endDate);
 }

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

@@ -27,6 +27,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
+
 import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.codehaus.jackson.map.util.BeanUtil;
@@ -5714,4 +5715,29 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			checkMaxStudentNum(courseSchedules);
 		}
 	}
+
+	@Override
+	public Object queryMusicCoursePlan(Integer userId, Date startDate, Date endDate) {
+		
+		List<CourseSchedule> courseScheduleList = courseScheduleDao.findStudentCoursesWithIncludeDateRange(userId, GroupType.MUSIC, startDate, endDate);
+		
+		List<CourseSchedulePlanDto> result = new ArrayList<CourseSchedulePlanDto>();
+		
+		for(CourseSchedule courseSchedule : courseScheduleList){
+			CourseSchedulePlanDto dto = new CourseSchedulePlanDto();
+			dto.setCourseSchedule(courseSchedule);
+			
+			//获取课程规划
+			MusicGroupTrainPlanSaveDto schoolTerm = musicGroupTrainPlanService.getSchoolTerm(courseSchedule);
+			int courseNumNo = courseScheduleDao.getCourseNumNo(schoolTerm);
+			List<MusicGroupTrainPlan> planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
+			if(planList.size() >= courseNumNo){
+				dto.setMusicGroupTrainPlan(planList.get(courseNumNo - 1));
+			}
+			
+			result.add(dto);
+		}
+		
+		return result;
+	}
 }

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

@@ -2044,28 +2044,28 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             studentDao.update(student);
         }
 
-        List<CourseSchedule> studentRepeatCourse1 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(0), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse1 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), null, allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(0), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse1)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");
             result.put("info", "抱歉啦,当前所选时段组合,与您现有课程「" + studentRepeatCourse1.get(0).getName() + "」时段冲突,请选择其他时段重试。");
             return result;
         }
-        List<CourseSchedule> studentRepeatCourse2 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(1), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse2 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), null, allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(1), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse2)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");
             result.put("info", "抱歉啦,当前所选时段组合,与您现有课程「" + studentRepeatCourse2.get(0).getName() + "」时段冲突,请选择其他时段重试。");
             return result;
         }
-        List<CourseSchedule> studentRepeatCourse3 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(2), DateUtil.addMinutes(allCourseDates.get(2), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse3 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), null, allCourseDates.get(2), DateUtil.addMinutes(allCourseDates.get(2), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse3)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");
             result.put("info", "抱歉啦,当前所选时段组合,与您现有课程「" + studentRepeatCourse3.get(0).getName() + "」时段冲突,请选择其他时段重试。");
             return result;
         }
-        List<CourseSchedule> studentRepeatCourse4 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(3), DateUtil.addMinutes(allCourseDates.get(3), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse4 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), null, allCourseDates.get(3), DateUtil.addMinutes(allCourseDates.get(3), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse4)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");

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

@@ -3,7 +3,6 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.auth.api.enums.CertificateTypeEnum;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
@@ -749,10 +748,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             analyzeAmount(couponPayTypeInfo, singleTypeList, list);
         });
         List<StudentPaymentOrderDetail> allList = new ArrayList<>();
-        //再处理全类型优惠券数据
-        if (CollectionUtils.isNotEmpty(allTypeList)) {
-            allTypeList.addAll(singleTypeList);
+        allTypeList.addAll(singleTypeList);
+        //有全类型优惠券就再处理全类型优惠券数据
+        if (Objects.nonNull(couponParam.get(CouponDetailTypeEnum.FULLCOUPON.getCode()))) {
             analyzeAmount(couponParam.get(CouponDetailTypeEnum.FULLCOUPON.getCode()), allList, allTypeList);
+        } else {
+            allList.addAll(allTypeList);
         }
     }
 
@@ -806,12 +807,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
         SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
         StudentRegistration phoneAndMusicGroupId = null;
-        if(sysUser != null){
-            if(!musicGroup.getTenantId().equals(sysUser.getTenantId())){
+        if (sysUser != null) {
+            if (!musicGroup.getTenantId().equals(sysUser.getTenantId())) {
                 throw new BizException("该手机号已注册");
             }
             phoneAndMusicGroupId = studentRegistrationDao.getByUserIdAndMusicGroupId(musicGroupId, sysUser.getId());
-        }else {
+        } else {
             phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, studentRegistration.getParentsPhone());
         }
 

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

@@ -24,7 +24,6 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.service.IdGeneratorService;
-import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.DateUtils;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.date.DateUtil;
@@ -238,7 +237,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
 
     /**
      * 启用/停用
-     * 第一个启用默认激活账号等信息
+     * 第一次启用默认开通账号
      *
      * @param id    机构id
      * @param state 机构状态1启动 2停用
@@ -447,7 +446,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg(),
-                    1,//临时写死
+                    1,//todo 机构开通付款临时写死
                     tenantEnum.getCode()
             );
         } else {
@@ -604,8 +603,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     public Map<String, Object> recharge(Integer tenantId, BigDecimal amount) throws Exception {
         log.error("机构 " + tenantId.toString() + "充值");
         TenantInfo tenantInfo = Optional.ofNullable(tenantId)
-                                        .map(baseMapper::selectById)
-                                        .orElseThrow(() -> new BizException("充值时,未查询到机构信息!"));
+                .map(baseMapper::selectById)
+                .orElseThrow(() -> new BizException("充值时,未查询到机构信息!"));
         String key = "Tenant_Pay:" + tenantId;
         RBucket<Object> bucket = redissonClient.getBucket(key);
         //原子操作 抢锁成功为true

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

@@ -2655,6 +2655,9 @@
                  LEFT JOIN class_group cg ON cg.id_ = csts.class_group_id_
         WHERE (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
           AND csts.user_id_ = #{userId}
+          <if test="groupType != null">
+          	and csts.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+          </if>
           AND #{startTime} &lt; CONCAT(cs.class_date_, ' ', cs.end_class_time_)
           AND #{endTime} &gt; CONCAT(cs.class_date_, ' ', cs.start_class_time_)
     </select>
@@ -2684,6 +2687,9 @@
                  LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
         WHERE (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
           AND cssp.user_id_ = #{userId}
+          <if test="groupType != null">
+          	and csts.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+          </if>
           AND #{startTime} &lt; CONCAT(cs.class_date_, ' ', cs.end_class_time_)
           AND #{endTime} &gt; CONCAT(cs.class_date_, ' ', cs.start_class_time_);
     </select>

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

@@ -208,9 +208,9 @@
 			<if test="parentId != null">
 				AND sesc.parent_id_ = #{parentId}
 			</if>
-			<if test="organId != null and organId != ''">
+			<!-- <if test="organId != null and organId != ''">
 				AND INTE_ARRAY(#{organId},sesc.organ_id_)
-			</if>
+			</if> -->
 			<if test="search != null and search != ''">
 				AND (sesa.id_ = #{search} OR ses.name_ LIKE CONCAT('%',#{search},'%'))
 			</if>

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

@@ -148,9 +148,9 @@
     <sql id="queryPageSql">
 		<where>
 			ses.del_flag_ = 0
-			<if test="organId != null and organId != null">
+			<!-- <if test="organId != null and organId != null">
 				AND INTE_ARRAY(smsc.organ_id_,#{organId})
-			</if>
+			</if> -->
 			<if test="categoriesId != null">
 				AND FIND_IN_SET(ses.music_score_categories_id_,#{categoriesId})
 			</if>

+ 2 - 2
mec-common/common-core/src/main/java/com/ym/mec/common/security/SecurityConstants.java

@@ -2,9 +2,9 @@ package com.ym.mec.common.security;
 
 public interface SecurityConstants {
 
-	public static final String USERNAME_PRINCIPAL_PREFIX = "username:";
+	String USERNAME_PRINCIPAL_PREFIX = "username:";
 
-	public static final String PHONE_PRINCIPAL_PREFIX = "phone:";
+	String PHONE_PRINCIPAL_PREFIX = "phone:";
 
 	String PARAM_VERIFY_EXCEPTION = "参数校验异常";
 

+ 22 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseScheduleController.java

@@ -8,10 +8,13 @@ import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.util.date.DateUtil;
 import com.yonge.log.model.AuditLogAnnotation;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
@@ -89,4 +92,23 @@ public class StudentCourseScheduleController extends BaseController {
 		return succeed(scheduleService.queryCourseInfoByGroupId(groupType,groupId));
 	}
 
+	@ApiOperation(value = "获取本周课程规划")
+	@GetMapping("/queryCoursePlan")
+	public Object queryCoursePlan(){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if(sysUser == null || sysUser.getId() == null){
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		
+		Date now = new Date();
+		
+		Date startDate = DateUtil.getWeekMondayWithDate(now);
+		startDate = DateUtil.formatHMSToZero(startDate);
+		
+		Date endDate = DateUtil.addDays(startDate, 7);
+		endDate = DateUtil.getLastSecondWithDay(endDate);
+		
+		return succeed(scheduleService.queryMusicCoursePlan(sysUser.getId(), startDate, endDate));
+	}
+
 }

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

@@ -107,7 +107,7 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"STUDENT");
+		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"STUDENT", sysUser.getTenantId());
 
 		if (map == null || map.size() == 0) {
 			return succeed();

+ 10 - 0
mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

@@ -997,6 +997,16 @@ public class DateUtil {
 		calendar.set(Calendar.SECOND, 59);
 		return calendar.getTime();
 	}
+	
+	public static Date formatHMSToZero(Date date) {    
+        Calendar cal = Calendar.getInstance();  
+        cal.setTime(date);  
+        cal.set(Calendar.HOUR_OF_DAY, 0);  
+        cal.set(Calendar.MINUTE, 0);  
+        cal.set(Calendar.SECOND, 0);  
+        cal.set(Calendar.MILLISECOND, 0);  
+        return cal.getTime(); 
+    }
 
 	/**
 	 * @describe 获取指定时间在当天最后的时间