瀏覽代碼

StringUtil移动到toolset-base包,website客户端登录接口

liweifan 3 年之前
父節點
當前提交
5ff69bd561
共有 88 個文件被更改,包括 1465 次插入589 次删除
  1. 101 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/QRLoginDto.java
  2. 6 6
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/LoginEntity.java
  3. 6 0
      cooleshow-auth/auth-server/pom.xml
  4. 3 3
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/PhoneLoginAuthenticationFilter.java
  5. 183 180
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/UsernameAuthenticationFilter.java
  6. 134 128
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  7. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  8. 3 3
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  9. 214 102
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  10. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  11. 1 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsCollectController.java
  12. 1 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsFollowController.java
  13. 1 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsLikeController.java
  14. 1 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsPrivateMessageController.java
  15. 0 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsReplyController.java
  16. 0 6
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/HomeController.java
  17. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/MusicTheoryController.java
  18. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  19. 1 3
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/BizHttpStatus.java
  20. 4 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java
  21. 79 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/TokenUtil.java
  22. 263 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/WebUtil.java
  23. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsCartItemController.java
  24. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  25. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  26. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java
  27. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseScheduleRepliedController.java
  28. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  29. 2 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  30. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  31. 1 3
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java
  32. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentAttendanceController.java
  33. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentCourseHomeworkController.java
  34. 0 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  35. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/UserOrderClient.java
  36. 0 1
      cooleshow-user/user-biz/pom.xml
  37. 1 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java
  38. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  39. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
  40. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java
  41. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java
  42. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TeacherTypeEnum.java
  43. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  44. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  45. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  46. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  47. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentStarServiceImpl.java
  48. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTotalServiceImpl.java
  49. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  50. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  51. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherTotalServiceImpl.java
  52. 1 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  53. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  54. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  55. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  56. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  57. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/DistributedLock.java
  58. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/PageUtil.java
  59. 1 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  60. 0 30
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java
  61. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  62. 2 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  63. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java
  64. 0 4
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/VipCardRecordController.java
  65. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  66. 0 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomBuyRecordController.java
  67. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  68. 1 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserAccountController.java
  69. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java
  70. 2 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java
  71. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  72. 1 1
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java
  73. 95 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java
  74. 48 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherAuthEntryRecordController.java
  75. 49 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherAuthMusicianRecordController.java
  76. 1 6
      pom.xml
  77. 1 1
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/CharPool.java
  78. 45 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/Charsets.java
  79. 1 1
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/StringPool.java
  80. 94 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/ClassUtil.java
  81. 67 5
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/StringUtil.java
  82. 1 1
      toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java
  83. 1 1
      toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/SqlKeyword.java
  84. 1 1
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java
  85. 1 1
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/core/service/impl/SysConfigPaymentServiceImpl.java
  86. 1 2
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java
  87. 1 1
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/OriginalWxAppTemplate.java
  88. 0 5
      toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelUtils.java

+ 101 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/QRLoginDto.java

@@ -0,0 +1,101 @@
+package com.yonge.cooleshow.auth.api.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+@ApiModel(value = "二维码登录对象")
+public class QRLoginDto implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "二维码登录code")
+    private String code;
+
+    @ApiModelProperty(value = "过期时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date expireTime;
+
+    @ApiModelProperty(value = "状态 no_scan 未扫码 scanned 已扫码 succeed 登录成功 filed 登录失败")
+    private String codeStatus;
+
+	@ApiModelProperty(value = "登录的客户端")
+	private String clientId;
+
+	@ApiModelProperty(value = "登录的客户端Secret")
+	private String clientSecret;
+
+    @ApiModelProperty(value = "登录用户 STUDENT 学生 TEACHER 老师")
+	private String userType;
+
+    @ApiModelProperty(value = "登录token")
+    private Object token;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Date getExpireTime() {
+		return expireTime;
+	}
+
+	public void setExpireTime(Date expireTime) {
+		this.expireTime = expireTime;
+	}
+
+	public String getCodeStatus() {
+		return codeStatus;
+	}
+
+	public void setCodeStatus(String codeStatus) {
+		this.codeStatus = codeStatus;
+	}
+
+	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 getUserType() {
+		return userType;
+	}
+
+	public void setUserType(String userType) {
+		this.userType = userType;
+	}
+
+	public Object getToken() {
+		return token;
+	}
+
+	public void setToken(Object token) {
+		this.token = token;
+	}
+
+	@Override
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this);
+    }
+
+}

+ 6 - 6
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/LoginEntity.java

@@ -10,8 +10,8 @@ public class LoginEntity {
     private String clientSecret;
     //未注册是否立即注册
     private Boolean isSurportRegister;
-    //注册的用户类型,没有则按照clientId自动分配:STUDENT,TEACHER
-    private String registerUserType;
+    //登录的用户类型,没有则默认为clientId
+    private String loginUserType;
 
     private String phone;
     
@@ -49,12 +49,12 @@ public class LoginEntity {
         this.clientSecret = clientSecret;
     }
 
-    public String getRegisterUserType() {
-        return registerUserType;
+    public String getLoginUserType() {
+        return loginUserType;
     }
 
-    public void setRegisterUserType(String registerUserType) {
-        this.registerUserType = registerUserType;
+    public void setLoginUserType(String loginUserType) {
+        this.loginUserType = loginUserType;
     }
 
     public String getPhone() {

+ 6 - 0
cooleshow-auth/auth-server/pom.xml

@@ -101,6 +101,12 @@
             <artifactId>toolset-emoji</artifactId>
             <version>1.0</version>
         </dependency>
+        <!-- redisson -->
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>${redisson.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 3 - 3
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -25,7 +25,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 	private static final String SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY = "smsCode";
 	private static final String clientIdParameter = "clientId";
 	private static final String IS_SURPORT_REGISTER = "isSurportRegister";
-	private static final String REGISTER_USER_TYPE = "registerUserType";
+	private static final String LOGIN_USER_TYPE = "loginUserType";
 
 	private static final String DEVICE_NUM = "deviceNum";
 
@@ -48,7 +48,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		String credentials = obtainParameter(request, SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY);
 		
 		boolean isRegister = StringUtils.equals("true", request.getParameter(IS_SURPORT_REGISTER));
-		String registerUserType = obtainParameter(request, REGISTER_USER_TYPE);
+		String loginUserType = obtainParameter(request, LOGIN_USER_TYPE);
 
 		String clientId = request.getParameter(clientIdParameter).toUpperCase();
 
@@ -65,7 +65,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		loginEntity.setPhone(principal);
 		loginEntity.setSmsCode(credentials);
 		loginEntity.setIsSurportRegister(isRegister);
-		loginEntity.setRegisterUserType(registerUserType);
+		loginEntity.setLoginUserType(loginUserType);
 		loginEntity.setDeviceNum(deviceNum);
 
 		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);

+ 183 - 180
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/UsernameAuthenticationFilter.java

@@ -7,6 +7,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.yonge.toolset.base.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.LockedException;
@@ -25,185 +26,187 @@ import com.yonge.cooleshow.common.security.SecurityConstants;
 
 public class UsernameAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 
-	private SysUserService sysUserService;
-	
-	private SysUserDeviceService sysUserDeviceService;
-
-	// ~ Static fields/initializers
-	// =====================================================================================
-
-	private String usernameParameter = "username";
-	private String passwordParameter = "password";
-	private String clientIdParameter = "clientId";
-	private String deviceNumParameter = "deviceNum";
-	private boolean postOnly = true;
-
-	// ~ Constructors
-	// ===================================================================================================
-
-	public UsernameAuthenticationFilter() {
-		super(new AntPathRequestMatcher("/usernameLogin", "POST"));
-	}
-
-	// ~ Methods
-	// ========================================================================================================
-
-	public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
-		if (postOnly && !request.getMethod().equals("POST")) {
-			throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
-		}
-
-		String username = obtainUsername(request);
-		String password = obtainPassword(request);
-		if (username == null) {
-			username = "";
-		}
-
-		if (password == null) {
-			password = "";
-		}
-
-		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");
-		}
-		if (userInfo.getSysUser().getLockFlag() == 1) {
-			throw new LockedException("用户已锁定");
-		}
-	
-//		if (userInfo.getSysUser().getUserType() != SysUserType.SYSTEM && !StringUtils.equalsIgnoreCase(clientId, userInfo.getSysUser().getUserType().getCode())) {
-//			throw new LockedException("登录失败");
-//		}
-		if("EDUCATION".equals(clientId)){
-			clientId = "SYSTEM";
-		}
-		if (!userInfo.getSysUser().getUserType().contains(clientId)) {
-			throw new LockedException("用户不存在");
-		}
-
-		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);
-		
-		String deviceNum = request.getParameter(deviceNumParameter);
-		if (StringUtils.isNotBlank(deviceNum)) {
-			// 检查设备
-			sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
-		}
-
-		return authentication;
-	}
-
-	@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);
-	}
-
-	/**
-	 * Enables subclasses to override the composition of the password, such as by
-	 * including additional values and a separator.
-	 * <p>
-	 * This might be used for example if a postcode/zipcode was required in addition to
-	 * the password. A delimiter such as a pipe (|) should be used to separate the
-	 * password and extended value(s). The <code>AuthenticationDao</code> will need to
-	 * generate the expected password in a corresponding manner.
-	 * </p>
-	 *
-	 * @param request so that request attributes can be retrieved
-	 *
-	 * @return the password that will be presented in the <code>Authentication</code>
-	 * request token to the <code>AuthenticationManager</code>
-	 */
-	protected String obtainPassword(HttpServletRequest request) {
-		return request.getParameter(passwordParameter);
-	}
-
-	/**
-	 * Enables subclasses to override the composition of the username, such as by
-	 * including additional values and a separator.
-	 *
-	 * @param request so that request attributes can be retrieved
-	 *
-	 * @return the username that will be presented in the <code>Authentication</code>
-	 * request token to the <code>AuthenticationManager</code>
-	 */
-	protected String obtainUsername(HttpServletRequest request) {
-		return request.getParameter(usernameParameter);
-	}
-
-	/**
-	 * Provided so that subclasses may configure what is put into the authentication
-	 * request's details property.
-	 *
-	 * @param request that an authentication request is being created for
-	 * @param authRequest the authentication request object that should have its details
-	 * set
-	 */
-	protected void setDetails(HttpServletRequest request, UsernamePasswordAuthenticationToken authRequest) {
-		authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
-	}
-
-	/**
-	 * Sets the parameter name which will be used to obtain the username from the login
-	 * request.
-	 *
-	 * @param usernameParameter the parameter name. Defaults to "username".
-	 */
-	public void setUsernameParameter(String usernameParameter) {
-		Assert.hasText(usernameParameter, "Username parameter must not be empty or null");
-		this.usernameParameter = usernameParameter;
-	}
-
-	/**
-	 * Sets the parameter name which will be used to obtain the password from the login
-	 * request..
-	 *
-	 * @param passwordParameter the parameter name. Defaults to "password".
-	 */
-	public void setPasswordParameter(String passwordParameter) {
-		Assert.hasText(passwordParameter, "Password parameter must not be empty or null");
-		this.passwordParameter = passwordParameter;
-	}
-
-	/**
-	 * Defines whether only HTTP POST requests will be allowed by this filter. If set to
-	 * true, and an authentication request is received which is not a POST request, an
-	 * exception will be raised immediately and authentication will not be attempted. The
-	 * <tt>unsuccessfulAuthentication()</tt> method will be called as if handling a failed
-	 * authentication.
-	 * <p>
-	 * Defaults to <tt>true</tt> but may be overridden by subclasses.
-	 */
-	public void setPostOnly(boolean postOnly) {
-		this.postOnly = postOnly;
-	}
-
-	public final String getUsernameParameter() {
-		return usernameParameter;
-	}
-
-	public final String getPasswordParameter() {
-		return passwordParameter;
-	}
-
-	public void setSysUserService(SysUserService sysUserService) {
-		this.sysUserService = sysUserService;
-	}
-
-	public void setSysUserDeviceService(SysUserDeviceService sysUserDeviceService) {
-		this.sysUserDeviceService = sysUserDeviceService;
-	}
+    private SysUserService sysUserService;
+
+    private SysUserDeviceService sysUserDeviceService;
+
+    // ~ Static fields/initializers
+    // =====================================================================================
+
+    private String usernameParameter = "username";
+    private String passwordParameter = "password";
+    private String clientIdParameter = "clientId";
+    private String deviceNumParameter = "deviceNum";
+    private boolean postOnly = true;
+
+    // ~ Constructors
+    // ===================================================================================================
+
+    public UsernameAuthenticationFilter() {
+        super(new AntPathRequestMatcher("/usernameLogin", "POST"));
+    }
+
+    // ~ Methods
+    // ========================================================================================================
+
+    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
+        if (postOnly && !request.getMethod().equals("POST")) {
+            throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
+        }
+        String loginUserType = request.getParameter("loginUserType");
+
+        String username = obtainUsername(request);
+        String password = obtainPassword(request);
+        if (username == null) {
+            username = "";
+        }
+
+        if (password == null) {
+            password = "";
+        }
+
+        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");
+        }
+        if (userInfo.getSysUser().getLockFlag() == 1) {
+            throw new LockedException("用户已锁定");
+        }
+
+        if ("EDUCATION".equals(clientId)) {
+            clientId = "SYSTEM";
+        }
+        if (!StringUtil.isEmpty(loginUserType)) {
+            if (!userInfo.getSysUser().getUserType().contains(loginUserType)) {
+                throw new LockedException("用户不存在");
+            }
+        } else {
+            if (!userInfo.getSysUser().getUserType().contains(clientId)) {
+                throw new LockedException("用户不存在");
+            }
+        }
+
+        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);
+
+        String deviceNum = request.getParameter(deviceNumParameter);
+        if (StringUtils.isNotBlank(deviceNum)) {
+            // 检查设备
+            sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
+        }
+
+        return authentication;
+    }
+
+    @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);
+    }
+
+    /**
+     * Enables subclasses to override the composition of the password, such as by
+     * including additional values and a separator.
+     * <p>
+     * This might be used for example if a postcode/zipcode was required in addition to
+     * the password. A delimiter such as a pipe (|) should be used to separate the
+     * password and extended value(s). The <code>AuthenticationDao</code> will need to
+     * generate the expected password in a corresponding manner.
+     * </p>
+     *
+     * @param request so that request attributes can be retrieved
+     * @return the password that will be presented in the <code>Authentication</code>
+     * request token to the <code>AuthenticationManager</code>
+     */
+    protected String obtainPassword(HttpServletRequest request) {
+        return request.getParameter(passwordParameter);
+    }
+
+    /**
+     * Enables subclasses to override the composition of the username, such as by
+     * including additional values and a separator.
+     *
+     * @param request so that request attributes can be retrieved
+     * @return the username that will be presented in the <code>Authentication</code>
+     * request token to the <code>AuthenticationManager</code>
+     */
+    protected String obtainUsername(HttpServletRequest request) {
+        return request.getParameter(usernameParameter);
+    }
+
+    /**
+     * Provided so that subclasses may configure what is put into the authentication
+     * request's details property.
+     *
+     * @param request     that an authentication request is being created for
+     * @param authRequest the authentication request object that should have its details
+     *                    set
+     */
+    protected void setDetails(HttpServletRequest request, UsernamePasswordAuthenticationToken authRequest) {
+        authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
+    }
+
+    /**
+     * Sets the parameter name which will be used to obtain the username from the login
+     * request.
+     *
+     * @param usernameParameter the parameter name. Defaults to "username".
+     */
+    public void setUsernameParameter(String usernameParameter) {
+        Assert.hasText(usernameParameter, "Username parameter must not be empty or null");
+        this.usernameParameter = usernameParameter;
+    }
+
+    /**
+     * Sets the parameter name which will be used to obtain the password from the login
+     * request..
+     *
+     * @param passwordParameter the parameter name. Defaults to "password".
+     */
+    public void setPasswordParameter(String passwordParameter) {
+        Assert.hasText(passwordParameter, "Password parameter must not be empty or null");
+        this.passwordParameter = passwordParameter;
+    }
+
+    /**
+     * Defines whether only HTTP POST requests will be allowed by this filter. If set to
+     * true, and an authentication request is received which is not a POST request, an
+     * exception will be raised immediately and authentication will not be attempted. The
+     * <tt>unsuccessfulAuthentication()</tt> method will be called as if handling a failed
+     * authentication.
+     * <p>
+     * Defaults to <tt>true</tt> but may be overridden by subclasses.
+     */
+    public void setPostOnly(boolean postOnly) {
+        this.postOnly = postOnly;
+    }
+
+    public final String getUsernameParameter() {
+        return usernameParameter;
+    }
+
+    public final String getPasswordParameter() {
+        return passwordParameter;
+    }
+
+    public void setSysUserService(SysUserService sysUserService) {
+        this.sysUserService = sysUserService;
+    }
+
+    public void setSysUserDeviceService(SysUserDeviceService sysUserDeviceService) {
+        this.sysUserDeviceService = sysUserDeviceService;
+    }
 
 }

+ 134 - 128
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -23,132 +23,138 @@ import com.yonge.cooleshow.common.service.IdGeneratorService;
 
 public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider {
 
-	private UserDetailsService userDetailsService;
-
-	private IdGeneratorService smsCodeService;
-
-	private SysUserService sysUserService;
-	
-	private SysUserDeviceService sysUserDeviceService;
-
-	@Override
-	protected void additionalAuthenticationChecks(UserDetails userDetails, Authentication authentication) throws AuthenticationException {
-
-		if (authentication.getCredentials() == null) {
-			throw new BadCredentialsException(this.messages.getMessage("PhoneAuthenticationProvider.badCredentials", "Bad credentials"));
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	protected UserDetails retrieveUser(String username, Authentication authentication) throws AuthenticationException {
-		LoginEntity loginEntity = (LoginEntity) authentication.getCredentials();
-		if (loginEntity == null) {
-			throw new BadCredentialsException("Bad credentials");
-		}
-
-		String smsCode = loginEntity.getSmsCode();
-		
-		String phone = loginEntity.getPhone();
-
-		// 验证码验证
-		boolean b = smsCodeService.verifyValidCode(phone, smsCode,"SMS_VERIFY_CODE_LOGIN");
-		if (!b) {
-			throw new BadCredentialsException("验证码校验失败");
-		}
-
-		String clientId = loginEntity.getClientId();
-
-		Boolean isRegister = loginEntity.getIsSurportRegister();
-
-		String registerUserType = loginEntity.getRegisterUserType();
-
-		String deviceNum = loginEntity.getDeviceNum();
-
-		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(phone);
-
-		if (userInfo == null) {
-			if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
-				throw new LockedException("用户不存在");
-			}
-			
-			userInfo = sysUserService.registerUser(loginEntity.getPhone(), clientId,registerUserType);
-			
-			if (StringUtils.isNotBlank(deviceNum)) {
-				sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
-			}
-		} else {
-			SysUser user = userInfo.getSysUser();
-			if (user == null) {
-				throw new LockedException("用户不存在");
-			}
-			if (user.getLockFlag() == 1) {
-				throw new LockedException("用户已锁定");
-			}
-			
-			if (StringUtils.isNotBlank(deviceNum)) {
-				sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum);
-			}
-			
-			if (!userInfo.getSysUser().getUserType().contains(clientId)) {
-				if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
-					throw new LockedException("用户不存在");
-				} else {
-					user.setUserType(user.getUserType() + "," + clientId);
-					user.setUpdateTime(new Date());
-
-					// 添加userType以及附加信息
-					if (StringUtils.equals("STUDENT", clientId)) {
-						sysUserService.saveStudent(user);
-					} else if (StringUtils.equals("TEACHER", clientId)) {
-						sysUserService.saveTeacher(user);
-					}
-					sysUserService.update(user);
-				}
-			}
-		}
-
-		UserDetails loadedUser;
-		try {
-			loadedUser = userDetailsService.loadUserByUsername(username);
-		} catch (UsernameNotFoundException e) {
-			throw e;
-		} catch (Exception e) {
-			throw new InternalAuthenticationServiceException(e.getMessage(), e);
-		}
-
-		if (loadedUser == null) {
-			throw new InternalAuthenticationServiceException("账户不存在");
-		} else {
-			return loadedUser;
-		}
-	}
-
-	@Override
-	protected Authentication createSuccessAuthentication(Object principal, Authentication authentication, UserDetails user) {
-		PhoneAuthenticationToken result = new PhoneAuthenticationToken(principal, authentication.getCredentials(), user.getAuthorities());
-		result.setDetails(authentication.getDetails());
-		return result;
-	}
-
-	@Override
-	public boolean supports(Class<?> aClass) {
-		return PhoneAuthenticationToken.class.isAssignableFrom(aClass);
-	}
-
-	public void setUserDetailsService(UserDetailsService userDetailsService) {
-		this.userDetailsService = userDetailsService;
-	}
-
-	public void setSysUserService(SysUserService sysUserService) {
-		this.sysUserService = sysUserService;
-	}
-
-	public void setSmsCodeService(IdGeneratorService smsCodeService) {
-		this.smsCodeService = smsCodeService;
-	}
-
-	public void setSysUserDeviceService(SysUserDeviceService sysUserDeviceService) {
-		this.sysUserDeviceService = sysUserDeviceService;
-	}
+    private UserDetailsService userDetailsService;
+
+    private IdGeneratorService smsCodeService;
+
+    private SysUserService sysUserService;
+
+    private SysUserDeviceService sysUserDeviceService;
+
+    @Override
+    protected void additionalAuthenticationChecks(UserDetails userDetails, Authentication authentication) throws AuthenticationException {
+
+        if (authentication.getCredentials() == null) {
+            throw new BadCredentialsException(this.messages.getMessage("PhoneAuthenticationProvider.badCredentials", "Bad credentials"));
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    protected UserDetails retrieveUser(String username, Authentication authentication) throws AuthenticationException {
+        LoginEntity loginEntity = (LoginEntity) authentication.getCredentials();
+        if (loginEntity == null) {
+            throw new BadCredentialsException("Bad credentials");
+        }
+
+        String smsCode = loginEntity.getSmsCode();
+        String phone = loginEntity.getPhone();
+        // 验证码验证
+        boolean b = smsCodeService.verifyValidCode(phone, smsCode, "SMS_VERIFY_CODE_LOGIN");
+        if (!b) {
+            throw new BadCredentialsException("验证码校验失败");
+        }
+
+        String clientId = loginEntity.getClientId();
+        Boolean isRegister = loginEntity.getIsSurportRegister();
+        String loginUserType = loginEntity.getLoginUserType();
+        String deviceNum = loginEntity.getDeviceNum();
+
+        SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(phone);
+
+        if (userInfo == null) {
+            if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
+                throw new LockedException("用户不存在");
+            }
+
+            userInfo = sysUserService.registerUser(loginEntity.getPhone(), clientId, loginUserType);
+
+            if (StringUtils.isNotBlank(deviceNum)) {
+                sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
+            }
+        } else {
+            SysUser user = userInfo.getSysUser();
+            if (user == null) {
+                throw new LockedException("用户不存在");
+            }
+            if (user.getLockFlag() == 1) {
+                throw new LockedException("用户已锁定");
+            }
+
+            if (StringUtils.isNotBlank(deviceNum)) {
+                sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum);
+            }
+
+            if (!userInfo.getSysUser().getUserType().contains(clientId)
+                    && !userInfo.getSysUser().getUserType().contains(loginUserType)) {
+
+                if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
+                    throw new LockedException("用户不存在");
+                } else {
+                    user.setUpdateTime(new Date());
+
+                    if (StringUtils.equalsIgnoreCase(loginUserType, "TEACHER")) {
+                        user.setUserType(user.getUserType() + "," + loginUserType);
+                        sysUserService.saveTeacher(user);
+                    } else if (StringUtils.equalsIgnoreCase(loginUserType, "STUDENT")) {
+                        user.setUserType(user.getUserType() + "," + loginUserType);
+                        sysUserService.saveStudent(user);
+                    } else if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
+                        user.setUserType(user.getUserType() + "," + clientId);
+                        sysUserService.saveTeacher(user);
+                    } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
+                        user.setUserType(user.getUserType() + "," + clientId);
+                        sysUserService.saveStudent(user);
+                    } else {
+                        throw new LockedException("用户不存在");
+                    }
+                    sysUserService.update(user);
+                }
+            }
+
+        }
+
+        UserDetails loadedUser;
+        try {
+            loadedUser = userDetailsService.loadUserByUsername(username);
+        } catch (UsernameNotFoundException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new InternalAuthenticationServiceException(e.getMessage(), e);
+        }
+
+        if (loadedUser == null) {
+            throw new InternalAuthenticationServiceException("账户不存在");
+        } else {
+            return loadedUser;
+        }
+    }
+
+    @Override
+    protected Authentication createSuccessAuthentication(Object principal, Authentication authentication, UserDetails user) {
+        PhoneAuthenticationToken result = new PhoneAuthenticationToken(principal, authentication.getCredentials(), user.getAuthorities());
+        result.setDetails(authentication.getDetails());
+        return result;
+    }
+
+    @Override
+    public boolean supports(Class<?> aClass) {
+        return PhoneAuthenticationToken.class.isAssignableFrom(aClass);
+    }
+
+    public void setUserDetailsService(UserDetailsService userDetailsService) {
+        this.userDetailsService = userDetailsService;
+    }
+
+    public void setSysUserService(SysUserService sysUserService) {
+        this.sysUserService = sysUserService;
+    }
+
+    public void setSmsCodeService(IdGeneratorService smsCodeService) {
+        this.smsCodeService = smsCodeService;
+    }
+
+    public void setSysUserDeviceService(SysUserDeviceService sysUserDeviceService) {
+        this.sysUserDeviceService = sysUserDeviceService;
+    }
 }

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -121,10 +121,10 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      *
      * @param phone
      * @param clientId
-     * @param registerUserType
+     * @param loginUserType
      * @return
      */
-    SysUserInfo registerUser(String phone, String clientId, String registerUserType);
+    SysUserInfo registerUser(String phone, String clientId, String loginUserType);
 
     /**
      * 刷新token

+ 3 - 3
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -142,10 +142,10 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public SysUserInfo registerUser(String phone, String clientId, String registerUserType) {
-        if (StringUtils.equalsIgnoreCase(registerUserType, "TEACHER")) {
+    public SysUserInfo registerUser(String phone, String clientId, String loginUserType) {
+        if (StringUtils.equalsIgnoreCase(loginUserType, "TEACHER")) {
             return registerTeacher(phone);
-        } else if (StringUtils.equalsIgnoreCase(registerUserType, "STUDENT")) {
+        } else if (StringUtils.equalsIgnoreCase(loginUserType, "STUDENT")) {
             return registerStudent(phone);
         } else if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
             return registerTeacher(phone);

+ 214 - 102
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -1,17 +1,22 @@
 package com.yonge.cooleshow.auth.web.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import com.yonge.cooleshow.auth.api.dto.QRLoginDto;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.util.TokenUtil;
+import com.yonge.toolset.base.util.StringUtil;
+import io.swagger.annotations.*;
 
 import java.io.IOException;
 import java.util.Base64;
+import java.util.Calendar;
 import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -24,10 +29,7 @@ import org.springframework.security.oauth2.provider.token.ResourceServerTokenSer
 import org.springframework.security.oauth2.provider.token.TokenStore;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -43,130 +45,240 @@ import com.yonge.cooleshow.common.security.SecurityUtils;
 @Api(tags = "认证服务")
 public class TokenController extends BaseController {
 
-	@Autowired
-	private CustomTokenServices tokenService;
-	
-	@Autowired
-	private ResourceServerTokenServices resourceServerTokenServices;
-	
-	@Autowired
-	private TokenStore tokenStore;
-
-	@Autowired
-	private RestTemplate restTemplate;
-
-	@Autowired
-	private ObjectMapper objectMapper;
-
-	@Autowired
-	private SysUserService userService;
-
-    @PostMapping(value = "/smsLogin",consumes = MediaType.APPLICATION_JSON_VALUE)
-	@ApiOperation(value = "短信验证码的方式登录")
-	@ApiImplicitParams({ @ApiImplicitParam(name = "smsCode", value = "验证码", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String") })
+    @Autowired
+    private CustomTokenServices tokenService;
+
+    @Autowired
+    private ResourceServerTokenServices resourceServerTokenServices;
+
+    @Autowired
+    private TokenStore tokenStore;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Autowired
+    private SysUserService userService;
+
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @PostMapping(value = "/smsLogin", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "短信验证码的方式登录")
+    @ApiImplicitParams({@ApiImplicitParam(name = "smsCode", value = "验证码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")})
     public Object smsLogin() {
-		return succeed();
+        return succeed();
     }
 
     @GetMapping("/queryUserInfo")
     public SysUser queryUserInfo() {
-		AuthUser authUser = SecurityUtils.getUser();
-		if(authUser != null){
-			return userService.get(authUser.getUserId());
-		}
-		return null;
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser != null) {
+            return userService.get(authUser.getUserId());
+        }
+        return null;
     }
 
-	@ApiOperation(value = "获取用户信息")
+    @ApiOperation(value = "获取用户信息")
     @GetMapping("/api/queryUserInfo")
     public Object apiQueryUserInfo() {
-		AuthUser authUser = SecurityUtils.getUser();
-		if(authUser != null){
-			return succeed(userService.queryUserInfo(authUser.getUserId()));
-		}
-		return failed("获取用户信息失败");
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser != null) {
+            return succeed(userService.queryUserInfo(authUser.getUserId()));
+        }
+        return failed("获取用户信息失败");
     }
-    
-    @PostMapping(value = "/usernameLogin",consumes = MediaType.APPLICATION_JSON_VALUE)
-	@ApiOperation(value = "手机号密码方式登录")
-	@ApiImplicitParams({ @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "username", value = "手机号", required = true, dataType = "String") })
+
+    @PostMapping(value = "/usernameLogin", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "手机号密码方式登录")
+    @ApiImplicitParams({@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "username", value = "手机号", required = true, dataType = "String")})
     public Object usernameLogin() {
-		return succeed();
+        return succeed();
     }
 
-	@PostMapping(value = "/refreshToken",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	@ApiOperation(value = "刷新token")
-	public HttpResponseResult refreshToken(String refreshToken, String clientId, String clientSecret) throws IOException {
-		String url = "http://auth-server/oauth/token";
+    @PostMapping(value = "/refreshToken", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+    @ApiOperation(value = "刷新token")
+    public HttpResponseResult refreshToken(String refreshToken, String clientId, String clientSecret) throws IOException {
+        String url = "http://auth-server/oauth/token";
+
+        String base64ClientCredentials = Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes());
 
-		String base64ClientCredentials = Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes());
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Authorization", "Basic " + base64ClientCredentials);
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
 
-		HttpHeaders headers = new HttpHeaders();
-		headers.add("Authorization", "Basic " + base64ClientCredentials);
-		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+        params.add("refresh_token", refreshToken);
+        params.add("grant_type", "refresh_token");
+        params.add("client_id", clientId);
+        params.add("client_secret", clientSecret);
 
-		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
-		params.add("refresh_token", refreshToken);
-		params.add("grant_type", "refresh_token");
-		params.add("client_id", clientId);
-		params.add("client_secret", clientSecret);
+        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
 
-		HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
 
-		ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
+        return succeed(objectMapper.readValue(resp.getBody(), Map.class));
+    }
 
-		return succeed(objectMapper.readValue(resp.getBody(), Map.class));
-	}
+    @GetMapping(value = "exit")
+    @ApiOperation(value = "退出登录")
+    public HttpResponseResult<String> logout(HttpServletRequest request) {
+        String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
+        if (StringUtils.isBlank(authHeader)) {
+            return failed("退出失败,token 为空");
+        }
 
-	@GetMapping(value = "exit")
-	@ApiOperation(value = "退出登录")
-	public HttpResponseResult<String> logout(HttpServletRequest request) {
-		String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
-		if (StringUtils.isBlank(authHeader)) {
-			return failed("退出失败,token 为空");
-		}
+        String tokenValue = authHeader.toLowerCase().replace(OAuth2AccessToken.BEARER_TYPE.toLowerCase(), StringUtils.EMPTY).trim();
 
-		String tokenValue = authHeader.toLowerCase().replace(OAuth2AccessToken.BEARER_TYPE.toLowerCase(), StringUtils.EMPTY).trim();
+        tokenService.revokeToken(tokenValue);
 
-		tokenService.revokeToken(tokenValue);
+        return succeed("退出成功");
+    }
 
-		return succeed("退出成功");
-	}
+    @PostMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+    @ApiOperation(value = "指定用户退出登录")
+    public HttpResponseResult<String> exitByPhone(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone) {
 
-	@PostMapping(value = "exit/{clientId}/{phone}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	@ApiOperation(value = "指定用户退出登录")
-	public HttpResponseResult<String> exitByPhone(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone) {
+        return tokenService.revokeToken(clientId, phone) ? succeed("退出成功") : failed();
+    }
 
-		return tokenService.revokeToken(clientId, phone) ? succeed("退出成功") : failed();
-	}
+    @GetMapping(value = "/checkToken", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+    @ApiOperation(value = "检查token")
+    public HttpResponseResult<Object> checkToken(HttpServletRequest request) throws IOException {
 
-	@GetMapping(value = "/checkToken",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	@ApiOperation(value = "检查token")
-	public HttpResponseResult<Object> checkToken(HttpServletRequest request) throws IOException {
+        String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
+        if (StringUtils.isBlank(authHeader)) {
+            return failed(HttpStatus.FORBIDDEN, "token 为空");
+        }
 
-		String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
-		if (StringUtils.isBlank(authHeader)) {
-			return failed(HttpStatus.FORBIDDEN, "token 为空");
-		}
+        String tokenValue = authHeader.toLowerCase().replace(OAuth2AccessToken.BEARER_TYPE.toLowerCase(), StringUtils.EMPTY).trim();
 
-		String tokenValue = authHeader.toLowerCase().replace(OAuth2AccessToken.BEARER_TYPE.toLowerCase(), StringUtils.EMPTY).trim();
+        OAuth2AccessToken accessToken = resourceServerTokenServices.readAccessToken(tokenValue);
+        if (accessToken == null) {
+            return failed(HttpStatus.FORBIDDEN, "token 无效");
+        }
 
-		OAuth2AccessToken accessToken = resourceServerTokenServices.readAccessToken(tokenValue);
-		if (accessToken == null) {
-			return failed(HttpStatus.FORBIDDEN, "token 无效");
-		}
+        if (accessToken.isExpired()) {
+            return failed(HttpStatus.FORBIDDEN, "token 已过期");
+        }
 
-		if (accessToken.isExpired()) {
-			return failed(HttpStatus.FORBIDDEN, "token 已过期");
-		}
+        return succeed();
+    }
 
-		return succeed();
-	}
+
+    /**
+     * 获取二维码登录code(不需要鉴权)
+     *
+     * @return
+     */
+    @GetMapping("/getQRLoginCode")
+    @ApiOperation(value = "获取二维码登录code")
+    public HttpResponseResult<QRLoginDto> getQRLoginCode(
+            @ApiParam(value = "clientId", required = true) @RequestParam("clientId") String clientId,
+            @ApiParam(value = "clientSecret", required = true) @RequestParam("clientSecret") String clientSecret) {
+        //todo 验证客户端id
+
+        QRLoginDto qrLogin = new QRLoginDto();
+
+        UUID uuid = UUID.randomUUID();
+        qrLogin.setCode(uuid.toString());
+
+        Calendar instance = Calendar.getInstance();
+        instance.add(Calendar.MINUTE, 5);
+        qrLogin.setExpireTime(instance.getTime());
+        qrLogin.setClientId(clientId);
+        qrLogin.setClientSecret(clientSecret);
+        qrLogin.setCodeStatus("no_scan");
+
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(uuid.toString()))
+                .set(qrLogin, 5, TimeUnit.MINUTES);
+
+        return HttpResponseResult.succeed(qrLogin);
+    }
+
+
+    /**
+     * 前端轮询登录(不需要鉴权)
+     *
+     * @return
+     */
+    @GetMapping("/pollingQRLoginCode")
+    @ApiOperation(value = "获取二维码登录code")
+    public HttpResponseResult<QRLoginDto> pollingQRLoginCode(@ApiParam(value = "二维码登录code", required = true) @RequestParam("code") String code) {
+        if (StringUtil.isEmpty(code)) {
+            return HttpResponseResult.failed("登录失败");
+        }
+        Object data = redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code))
+                .get();
+        if (null != data) {
+            QRLoginDto dto = (QRLoginDto) data;
+            return HttpResponseResult.succeed(dto);
+        } else {
+            return HttpResponseResult.failed("二维码已过期");
+        }
+    }
+
+    /**
+     * 二维码登录
+     *
+     * @return
+     * @throws IOException
+     */
+    @GetMapping(value = "/qrLogin")
+    @ApiOperation(value = "二维码登录")
+    public HttpResponseResult<QRLoginDto> qrLogin(
+            @ApiParam(value = "二维码登录code", required = true) @RequestParam("code") String code
+    ) throws IOException {
+        Object data = redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code))
+                .get();
+        if (null == data) {
+            return HttpResponseResult.failed("二维码已过期");
+        }
+
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser == null) {
+            return HttpResponseResult.failed("请先登录");
+        }
+        QRLoginDto dto = (QRLoginDto) data;
+        dto.setCodeStatus("scanned");
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto,5,TimeUnit.MINUTES);
+
+        String url = "http://auth-server/oauth/token";
+
+        String userType = TokenUtil.getClientIdFromHeader();
+        String base64ClientCredentials = Base64.getEncoder().encodeToString((dto.getClientId() + ":" + dto.getClientSecret()).getBytes());
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Authorization", "Basic " + base64ClientCredentials);
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+        params.add("client_id", dto.getClientId());
+        params.add("client_secret", dto.getClientSecret());
+        params.add("username", authUser.getUsername());
+        params.add("password", authUser.getPassword());
+        params.add("grant_type", "password");
+
+        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+
+        ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
+
+        Map map = objectMapper.readValue(resp.getBody(), Map.class);
+
+        dto.setUserType(userType);
+        dto.setCodeStatus("succeed");
+        dto.setToken(map);
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto,5,TimeUnit.MINUTES);
+        return succeed(dto);
+    }
 
 }

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.auth.web.controller;
 
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -51,7 +52,6 @@ import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import com.yonge.toolset.utils.idcard.IdcardValidator;
-import com.yonge.toolset.utils.string.StringUtil;
 
 @RestController()
 @RequestMapping("user")

+ 1 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsCollectController.java

@@ -5,9 +5,9 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsFollowController.java

@@ -5,9 +5,9 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsLikeController.java

@@ -5,9 +5,9 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsPrivateMessageController.java

@@ -12,9 +12,9 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 0 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsReplyController.java

@@ -7,15 +7,12 @@ import com.yonge.cooleshow.bbs.dto.ReplyAuditDto;
 import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
 import com.yonge.cooleshow.bbs.service.BbsReplyService;
 import com.yonge.cooleshow.bbs.vo.BbsReplyAuditVo;
-import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 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.*;

+ 0 - 6
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/HomeController.java

@@ -4,23 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.dto.search.*;
-import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.service.*;
-import com.yonge.cooleshow.bbs.valid.AddGroup;
 import com.yonge.cooleshow.bbs.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/MusicTheoryController.java

@@ -7,7 +7,7 @@ import com.yonge.cooleshow.cms.service.SysNewsTypeService;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.cms.dto.AppParam;
 import com.yonge.cooleshow.cms.dto.SysNewsInformationDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;

+ 1 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/BizHttpStatus.java → cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/BizHttpStatus.java

@@ -1,6 +1,4 @@
-package com.yonge.cooleshow.biz.dal.enums;
-
-import io.swagger.models.auth.In;
+package com.yonge.cooleshow.common.enums;
 
 /**
  * @Author: liweifan

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java → cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.biz.dal.enums;
+package com.yonge.cooleshow.common.enums;
 
 import com.yonge.cooleshow.common.constant.CommonConstants;
 import com.yonge.toolset.base.enums.BaseEnum;
@@ -13,6 +13,8 @@ import java.time.Duration;
  * @Data: 2022/3/28 16:24
  */
 public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
+    QR_LOGIN_CODE("二维码登录code"),
+
     TEACHER_TOTAL("老师统计缓存"),
     STUDENT_TOTAL("学生统计缓存"),
     TEACHER_SUBJECT_ITEM("老师声部下拉缓存", Duration.ofHours(1L)),
@@ -20,6 +22,7 @@ public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
 
     LOCK_EXECUTE_ORDER("用户下单/付款/取消订单锁"),
     LOCK_CHANGE_ACCOUNT("账户变更锁"),
+
     ;
     /***
      * 缓存描述

+ 79 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/TokenUtil.java

@@ -0,0 +1,79 @@
+package com.yonge.cooleshow.common.util;
+
+import com.yonge.toolset.base.string.Charsets;
+import com.yonge.toolset.base.string.StringPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+
+/**
+ * 认证工具类
+ */
+public class TokenUtil {
+
+    private final static Logger log = LoggerFactory.getLogger(TokenUtil.class);
+
+    public final static String HEADER_KEY = "Authorization";
+    public final static String HEADER_PREFIX = "bearer ";
+
+    /**
+     * 解码
+     */
+    public static String getAuthorization() {
+        String header = WebUtil.getRequest().getHeader(TokenUtil.HEADER_KEY);
+        if (header == null || !header.startsWith(TokenUtil.HEADER_PREFIX)) {
+            throw new UnapprovedClientAuthenticationException("请求头中无client信息");
+        }
+        return header;
+    }
+
+    /**
+     * 解码
+     */
+    public static String[] extractAndDecodeHeader() {
+        String header = getAuthorization();
+        try {
+            byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
+
+            byte[] decoded;
+            try {
+                decoded = Base64.getDecoder().decode(base64Token);
+            } catch (IllegalArgumentException var7) {
+                throw new BadCredentialsException("Failed to decode basic authentication token");
+            }
+
+            String token = new String(decoded, Charsets.UTF_8_NAME);
+            int index = token.indexOf(StringPool.COLON);
+            if (index == -1) {
+                throw new BadCredentialsException("Invalid basic authentication token");
+            } else {
+                return new String[]{token.substring(0, index), token.substring(index + 1)};
+            }
+        } catch (UnsupportedEncodingException e) {
+            log.error(e.getMessage(), e);
+            throw new UnapprovedClientAuthenticationException("请求头中无client信息");
+        }
+    }
+
+    /**
+     * 获取请求头中的客户端id
+     */
+    public static String getClientIdFromHeader() {
+        String[] tokens = extractAndDecodeHeader();
+        return tokens[0];
+    }
+
+    /**
+     * 获取请求头中的客户端secret
+     */
+    public static String getClientSecretFromHeader() {
+        String[] tokens = extractAndDecodeHeader();
+        return tokens[1];
+    }
+
+
+}

+ 263 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/WebUtil.java

@@ -0,0 +1,263 @@
+package com.yonge.cooleshow.common.util;
+
+import com.yonge.toolset.base.string.StringPool;
+import com.yonge.toolset.base.util.ClassUtil;
+import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.lang.Nullable;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.method.HandlerMethod;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.Enumeration;
+import java.util.Objects;
+import java.util.function.Predicate;
+
+/**
+ * Miscellaneous utilities for web applications.
+ *
+ * @author L.cm
+ */
+public class WebUtil extends org.springframework.web.util.WebUtils {
+	private final static Logger log = LoggerFactory.getLogger(WebUtil.class);
+
+	/**
+	 * 判断是否ajax请求
+	 * spring ajax 返回含有 ResponseBody 或者 RestController注解
+	 *
+	 * @param handlerMethod HandlerMethod
+	 * @return 是否ajax请求
+	 */
+	public static boolean isBody(HandlerMethod handlerMethod) {
+		ResponseBody responseBody = ClassUtil.getAnnotation(handlerMethod, ResponseBody.class);
+		return responseBody != null;
+	}
+
+	/**
+	 * 读取cookie
+	 *
+	 * @param name cookie name
+	 * @return cookie value
+	 */
+	@Nullable
+	public static String getCookieVal(String name) {
+		HttpServletRequest request = WebUtil.getRequest();
+		Assert.notNull(request, "request from RequestContextHolder is null");
+		return getCookieVal(request, name);
+	}
+
+	/**
+	 * 读取cookie
+	 *
+	 * @param request HttpServletRequest
+	 * @param name    cookie name
+	 * @return cookie value
+	 */
+	@Nullable
+	public static String getCookieVal(HttpServletRequest request, String name) {
+		Cookie cookie = getCookie(request, name);
+		return cookie != null ? cookie.getValue() : null;
+	}
+
+	/**
+	 * 清除 某个指定的cookie
+	 *
+	 * @param response HttpServletResponse
+	 * @param key      cookie key
+	 */
+	public static void removeCookie(HttpServletResponse response, String key) {
+		setCookie(response, key, null, 0);
+	}
+
+	/**
+	 * 设置cookie
+	 *
+	 * @param response        HttpServletResponse
+	 * @param name            cookie name
+	 * @param value           cookie value
+	 * @param maxAgeInSeconds maxage
+	 */
+	public static void setCookie(HttpServletResponse response, String name, @Nullable String value, int maxAgeInSeconds) {
+		Cookie cookie = new Cookie(name, value);
+		cookie.setPath(StringPool.SLASH);
+		cookie.setMaxAge(maxAgeInSeconds);
+		cookie.setHttpOnly(true);
+		response.addCookie(cookie);
+	}
+
+	/**
+	 * 获取 HttpServletRequest
+	 *
+	 * @return {HttpServletRequest}
+	 */
+	public static HttpServletRequest getRequest() {
+		RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+		return (requestAttributes == null) ? null : ((ServletRequestAttributes) requestAttributes).getRequest();
+	}
+
+	/**
+	 * 返回json
+	 *
+	 * @param response HttpServletResponse
+	 * @param result   结果对象
+	 */
+	public static void renderJson(HttpServletResponse response, Object result) {
+		renderJson(response, result, MediaType.APPLICATION_JSON_UTF8_VALUE);
+	}
+
+	/**
+	 * 返回json
+	 *
+	 * @param response    HttpServletResponse
+	 * @param result      结果对象
+	 * @param contentType contentType
+	 */
+	public static void renderJson(HttpServletResponse response, Object result, String contentType) {
+		response.setCharacterEncoding("UTF-8");
+		response.setContentType(contentType);
+		try (PrintWriter out = response.getWriter()) {
+			out.append(JsonUtil.toJSONString(result));
+		} catch (IOException e) {
+			log.error(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * 获取ip
+	 *
+	 * @return {String}
+	 */
+	public static String getIP() {
+		return getIP(WebUtil.getRequest());
+	}
+
+	private static final String[] IP_HEADER_NAMES = new String[]{
+		"x-forwarded-for",
+		"Proxy-Client-IP",
+		"WL-Proxy-Client-IP",
+		"HTTP_CLIENT_IP",
+		"HTTP_X_FORWARDED_FOR"
+	};
+
+	private static final Predicate<String> IP_PREDICATE = (ip) -> StringUtil.isEmpty(ip) || StringPool.UNKNOWN.equalsIgnoreCase(ip);
+
+	/**
+	 * 获取ip
+	 *
+	 * @param request HttpServletRequest
+	 * @return {String}
+	 */
+	@Nullable
+	public static String getIP(@Nullable HttpServletRequest request) {
+		if (request == null) {
+			return StringPool.EMPTY;
+		}
+		String ip = null;
+		for (String ipHeader : IP_HEADER_NAMES) {
+			ip = request.getHeader(ipHeader);
+			if (!IP_PREDICATE.test(ip)) {
+				break;
+			}
+		}
+		if (IP_PREDICATE.test(ip)) {
+			ip = request.getRemoteAddr();
+		}
+		return StringUtil.isEmpty(ip) ? null : StringUtil.splitTrim(ip, StringPool.COMMA)[0];
+	}
+
+	/**
+	 * 获取请求头的值
+	 *
+	 * @param name 请求头名称
+	 * @return 请求头
+	 */
+	public static String getHeader(String name) {
+		HttpServletRequest request = getRequest();
+		return Objects.requireNonNull(request).getHeader(name);
+	}
+
+	/**
+	 * 获取请求头的值
+	 *
+	 * @param name 请求头名称
+	 * @return 请求头
+	 */
+	public static Enumeration<String> getHeaders(String name) {
+		HttpServletRequest request = getRequest();
+		return Objects.requireNonNull(request).getHeaders(name);
+	}
+
+	/**
+	 * 获取所有的请求头
+	 *
+	 * @return 请求头集合
+	 */
+	public static Enumeration<String> getHeaderNames() {
+		HttpServletRequest request = getRequest();
+		return Objects.requireNonNull(request).getHeaderNames();
+	}
+
+	/**
+	 * 获取请求参数
+	 *
+	 * @param name 请求参数名
+	 * @return 请求参数
+	 */
+	public static String getParameter(String name) {
+		HttpServletRequest request = getRequest();
+		return Objects.requireNonNull(request).getParameter(name);
+	}
+
+	/**
+	 * 获取 request 请求体
+	 *
+	 * @param servletInputStream servletInputStream
+	 * @return body
+	 */
+	public static String getRequestBody(ServletInputStream servletInputStream) {
+		StringBuilder sb = new StringBuilder();
+		BufferedReader reader = null;
+		try {
+			reader = new BufferedReader(new InputStreamReader(servletInputStream, StandardCharsets.UTF_8));
+			String line;
+			while ((line = reader.readLine()) != null) {
+				sb.append(line);
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			if (servletInputStream != null) {
+				try {
+					servletInputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return sb.toString();
+	}
+
+}
+

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsCartItemController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.portal.domain.CartProduct;
 import com.yonge.cooleshow.portal.domain.CartPromotionItem;
 import com.yonge.cooleshow.portal.service.OmsCartItemService;
 import com.yonge.cooleshow.portal.service.UmsMemberService;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -7,7 +7,7 @@ import com.yonge.cooleshow.portal.domain.ConfirmOrderResult;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.OrderParam;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -19,6 +19,7 @@ import com.yonge.cooleshow.portal.dto.OrderPayRes;
 import com.yonge.cooleshow.portal.service.*;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
@@ -30,7 +31,6 @@ import com.yonge.toolset.payment.base.model.Payment;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java

@@ -4,6 +4,7 @@ import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
@@ -11,7 +12,6 @@ import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import com.yonge.toolset.payment.base.model.ClosePayment;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseScheduleRepliedController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -15,7 +15,7 @@ import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;

+ 2 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
-import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
@@ -20,12 +19,13 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.BizHttpStatus;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
 import com.yonge.toolset.utils.easyexcel.ExcelUtils;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java

@@ -10,7 +10,7 @@ import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 1 - 3
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java

@@ -1,7 +1,6 @@
 package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.toolset.base.page.PageInfo;
@@ -9,7 +8,7 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -23,7 +22,6 @@ import com.yonge.cooleshow.biz.dal.entity.PianoRoomSettings;
 import com.yonge.cooleshow.biz.dal.service.PianoRoomSettingsService;
 
 import java.util.Date;
-import java.util.List;
 
 @RestController
 @RequestMapping("/pianoRoomSettings")

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentAttendanceController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentCourseHomeworkController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 0 - 10
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -3,30 +3,20 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.BizHttpStatus;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.utils.easyexcel.*;
 import io.swagger.annotations.*;
-import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.DigestUtils;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.lang.reflect.InvocationTargetException;
-import java.math.RoundingMode;
 import java.util.*;
 
 @RestController

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/UserOrderClient.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.admin.controller.open;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;

+ 0 - 1
cooleshow-user/user-biz/pom.xml

@@ -16,7 +16,6 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <rongcloud.im.version>3.2.17</rongcloud.im.version>
-        <redisson.version>3.16.4</redisson.version>
     </properties>
     <dependencies>
         <dependency>

+ 1 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java

@@ -2,19 +2,15 @@ package com.yonge.cooleshow.biz.dal.dto.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
-import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.springframework.format.annotation.DateTimeFormat;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
-import java.util.Date;
 
 /**
  * @Author: liweifan

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java

@@ -5,7 +5,7 @@ import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.format.annotation.DateTimeFormat;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TeacherTypeEnum.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 
 /***
  * 老师类型枚举

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -28,6 +28,7 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java

@@ -16,7 +16,7 @@ import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -24,11 +24,11 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.string.MessageFormatter;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -10,7 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.UserBindingTeacher;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentTotalService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentStarServiceImpl.java

@@ -2,8 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import org.redisson.api.RedissonClient;

+ 1 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTotalServiceImpl.java

@@ -8,9 +8,7 @@ import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.StudentStar;
-import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java

@@ -17,8 +17,8 @@ import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.slf4j.Logger;

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -20,9 +20,10 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.redisson.api.RedissonClient;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherTotalServiceImpl.java

@@ -7,7 +7,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -5,16 +5,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.TimeTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
-import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.utils.date.DateUtil;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,7 +25,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
-import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
 

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java

@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
@@ -14,6 +13,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
@@ -22,7 +22,6 @@ import com.yonge.toolset.payment.base.model.*;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -27,13 +27,13 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import com.yonge.toolset.payment.base.model.RefundBill;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.base.model.callback.RefundPaymentCallBack;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
@@ -17,9 +16,11 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
@@ -27,7 +28,6 @@ import com.yonge.toolset.payment.base.model.Payment;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -20,9 +20,9 @@ import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
 import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -155,7 +155,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             detail.setActualAmount(actualAmount.divide(new BigDecimal("100")));
             detail.setTransferTime(callback.getEndTime());
 
-            //审核通过,账户解冻,入账户明细
+            //提现成功,账户解冻,入账户明细
             UserAccountRecordDto accountRecordDto = new UserAccountRecordDto(
                     detail.getUserId(), detail.getAmount(), InOrOutEnum.OUT, AccountBizTypeEnum.WITHDRAWAL,
                     detail.getId(), "老师提现", null
@@ -171,7 +171,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             detail.setErrorCode(callback.getErrorCode());
             detail.setErrorMsg(callback.getErrorMsg());
 
-            //审核不通过,账户解冻
+            //提现失败,账户解冻
             UserAccountRecordDto accountRecordDto = new UserAccountRecordDto(
                     detail.getUserId(), detail.getAmount(), InOrOutEnum.OUT, AccountBizTypeEnum.WITHDRAWAL,
                     detail.getId(), "老师提现", null

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/DistributedLock.java

@@ -1,8 +1,7 @@
 package com.yonge.cooleshow.biz.dal.support;
 
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/PageUtil.java

@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.SqlKeyword;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.BeanUtils;
 
 import java.util.Map;

+ 1 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
@@ -19,12 +18,11 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 30
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -1,51 +1,21 @@
 package com.yonge.cooleshow.student.controller;
 
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.huifu.adapay.core.AdapayCore;
-import com.huifu.adapay.core.util.AdapaySign;
-import com.huifu.adapay.core.util.StringUtil;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.UserOrder;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
-import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
-import com.yonge.cooleshow.biz.dal.support.DistributedLock;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
-import com.yonge.toolset.payment.base.enums.MethodNameEnum;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
-import com.yonge.toolset.payment.base.enums.PayChannelEnum;
-import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.model.OpenAuth;
-import com.yonge.toolset.payment.base.model.Payment;
-import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
-import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
-import com.yonge.toolset.payment.original.wx.constant.WxpayConstant;
-import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @Author: liweifan

+ 1 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -11,7 +11,7 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;

+ 2 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -7,9 +7,8 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -19,9 +18,9 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.*;
 import org.redisson.api.RedissonClient;

+ 1 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java

@@ -5,7 +5,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;

+ 0 - 4
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/VipCardRecordController.java

@@ -8,17 +8,13 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
-import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 
 @RestController

+ 1 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -5,7 +5,7 @@ import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;

+ 0 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomBuyRecordController.java

@@ -6,16 +6,12 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.biz.dal.vo.PianoRoomBuyRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.PianoRoomBuyRecordSearch;
-import com.yonge.cooleshow.biz.dal.entity.PianoRoomBuyRecord;
 import com.yonge.cooleshow.biz.dal.service.PianoRoomBuyRecordService;
 
 @RestController

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -14,7 +14,7 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 1 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserAccountController.java

@@ -6,7 +6,6 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.biz.dal.service.UserAccountService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -17,8 +16,8 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java

@@ -16,7 +16,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;

+ 2 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java

@@ -7,9 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
-import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -19,9 +17,9 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java

@@ -13,8 +13,8 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;

+ 1 - 1
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java

@@ -18,8 +18,8 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 95 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java

@@ -0,0 +1,95 @@
+package com.yonge.cooleshow.website.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
+import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
+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.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/student")
+@Api(value = "学生表", tags = "学生表")
+public class StudentController extends BaseController {
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "查询学员")
+    @GetMapping("/queryUser")
+    public HttpResponseResult<Student> queryUser() throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        Student student = studentService.getById(user.getId());
+        return succeed(student);
+    }
+
+    @ApiOperation(value = "查询学员基本信息")
+    @GetMapping("/queryUserInfo")
+    public HttpResponseResult<StudentHomeVo> queryUserInfo() throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(studentService.queryUserInfo(user));
+    }
+
+    @ApiOperation(value = "设置声部")
+    @GetMapping("/setSubject")
+    public HttpResponseResult setSubject(@ApiParam(value = "声部主键集合", required = true) @RequestParam("subjectIds") String subjectIds) {
+        if (StringUtil.isEmpty(subjectIds)) {
+            return failed("参数不能为空");
+        }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return status(studentService.setSubject(user.getId(), subjectIds) > 0);
+    }
+
+    @ApiOperation(value = "获取声部搜索下拉框")
+    @PostMapping("/querySubjectItem")
+    public HttpResponseResult<List<Subject>> querySubjectItem() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(studentService.querySubjectItem(user.getId()));
+    }
+
+    @ApiOperation(value = "我的关注")
+    @PostMapping(value = "/queryMyFollow")
+    public HttpResponseResult<PageInfo<MyFollow>> queryMyFollow(@RequestBody QueryInfo query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<MyFollow> pages = studentService.queryMyFollow(PageUtil.getPage(query), sysUser.getId());
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+
+
+
+
+}

+ 48 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherAuthEntryRecordController.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.website.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.TeacherApplyDetailReq;
+import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping("/teacherAuthEntryRecord")
+@Api(value = "老师入驻审核表", tags = "老师入驻审核表")
+public class TeacherAuthEntryRecordController extends BaseController {
+    @Autowired
+    private TeacherAuthEntryRecordService teacherAuthEntryRecordService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @GetMapping("/getLastRecordByUserId")
+    @ApiOperation(value = "获取最近一次提交的申请内容")
+    public HttpResponseResult<TeacherAuthEntryRecordVo> getLastRecordByUserId() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        TeacherAuthEntryRecordVo detail = teacherAuthEntryRecordService.getLastRecordByUserId(user.getId());
+        return succeed(detail);
+    }
+
+    @PostMapping("/doApply")
+    @ApiOperation(value = "提交申请", notes = "传入teacherAuthEntryRecord")
+    public HttpResponseResult<Boolean> doApply(@Valid @RequestBody TeacherApplyDetailReq teacherApplyDetailDto) throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        //处理老师申请逻辑
+        return teacherAuthEntryRecordService.doApply(teacherApplyDetailDto, user);
+    }
+}

+ 49 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherAuthMusicianRecordController.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.website.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.TeacherAuthMusicianRecordService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/teacherAuthMusicianRecord")
+@Api(value = "老师音乐人审核表", tags = "老师音乐人审核表")
+public class TeacherAuthMusicianRecordController extends BaseController {
+    @Autowired
+    private TeacherAuthMusicianRecordService teacherAuthMusicianRecordService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    /**
+     * 获取音乐人审核状态
+     */
+    @GetMapping("/getMusicianAuthStatus")
+    @ApiOperation(value = "获取音乐人审核状态")
+    public HttpResponseResult<AuthStatusEnum> getMusicianAuthStatus() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        AuthStatusEnum musicianAuthStatus = teacherAuthMusicianRecordService.getMusicianAuthStatus(user.getId());
+        return succeed(musicianAuthStatus);
+    }
+
+    @PostMapping("/doApply")
+    @ApiOperation(value = "提交申请", notes = "传入teacherAuthEntryRecord")
+    public HttpResponseResult<Boolean> doApply() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        //处理老师申请逻辑
+        return teacherAuthMusicianRecordService.doApply(sysUser.getId());
+    }
+
+}

+ 1 - 6
pom.xml

@@ -21,6 +21,7 @@
 		<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
 		<zipkin.version>2.12.2</zipkin.version>
 		<google.zxing.version>3.4.0</google.zxing.version>
+		<redisson.version>3.16.4</redisson.version>
 	</properties>
 
 
@@ -114,12 +115,6 @@
 				<artifactId>mall-mbg</artifactId>
 				<version>${project.cooleshow.version}</version>
 			</dependency>
-			<!--mall安全模块-->
-			<dependency>
-				<groupId>com.yonge.cooleshow</groupId>
-				<artifactId>mall-security</artifactId>
-				<version>${project.cooleshow.version}</version>
-			</dependency>
 			<dependency>
 				<groupId>com.alibaba.cloud</groupId>
 				<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

+ 1 - 1
toolset/utils/src/main/java/com/yonge/toolset/utils/string/CharPool.java → toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/CharPool.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.utils.string;
+package com.yonge.toolset.base.string;
 
 /**
  * char 常量池

+ 45 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/Charsets.java

@@ -0,0 +1,45 @@
+package com.yonge.toolset.base.string;
+
+
+import org.springframework.util.StringUtils;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.UnsupportedCharsetException;
+
+/**
+ * 字符集工具类
+ *
+ * @author L.cm
+ */
+public class Charsets {
+
+    /**
+     * 字符集ISO-8859-1
+     */
+    public static final Charset ISO_8859_1 = StandardCharsets.ISO_8859_1;
+    public static final String ISO_8859_1_NAME = ISO_8859_1.name();
+
+    /**
+     * 字符集GBK
+     */
+    public static final Charset GBK = Charset.forName(StringPool.GBK);
+    public static final String GBK_NAME = GBK.name();
+
+    /**
+     * 字符集utf-8
+     */
+    public static final Charset UTF_8 = StandardCharsets.UTF_8;
+    public static final String UTF_8_NAME = UTF_8.name();
+
+    /**
+     * 转换为Charset对象
+     *
+     * @param charsetName 字符集,为空则返回默认字符集
+     * @return Charsets
+     * @throws UnsupportedCharsetException 编码不支持
+     */
+    public static Charset charset(String charsetName) throws UnsupportedCharsetException {
+        return StringUtils.isEmpty(charsetName) ? Charset.defaultCharset() : Charset.forName(charsetName);
+    }
+}

+ 1 - 1
toolset/utils/src/main/java/com/yonge/toolset/utils/string/StringPool.java → toolset/toolset-base/src/main/java/com/yonge/toolset/base/string/StringPool.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.utils.string;
+package com.yonge.toolset.base.string;
 
 /**
  * 静态 String 池

+ 94 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/ClassUtil.java

@@ -0,0 +1,94 @@
+package com.yonge.toolset.base.util;
+
+import org.springframework.core.BridgeMethodResolver;
+import org.springframework.core.DefaultParameterNameDiscoverer;
+import org.springframework.core.MethodParameter;
+import org.springframework.core.ParameterNameDiscoverer;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.core.annotation.SynthesizingMethodParameter;
+import org.springframework.web.method.HandlerMethod;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * 类工具类
+ *
+ * @author L.cm
+ */
+public class ClassUtil extends org.springframework.util.ClassUtils {
+
+	private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
+
+	/**
+	 * 获取方法参数信息
+	 *
+	 * @param constructor    构造器
+	 * @param parameterIndex 参数序号
+	 * @return {MethodParameter}
+	 */
+	public static MethodParameter getMethodParameter(Constructor<?> constructor, int parameterIndex) {
+		MethodParameter methodParameter = new SynthesizingMethodParameter(constructor, parameterIndex);
+		methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
+		return methodParameter;
+	}
+
+	/**
+	 * 获取方法参数信息
+	 *
+	 * @param method         方法
+	 * @param parameterIndex 参数序号
+	 * @return {MethodParameter}
+	 */
+	public static MethodParameter getMethodParameter(Method method, int parameterIndex) {
+		MethodParameter methodParameter = new SynthesizingMethodParameter(method, parameterIndex);
+		methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
+		return methodParameter;
+	}
+
+	/**
+	 * 获取Annotation
+	 *
+	 * @param method         Method
+	 * @param annotationType 注解类
+	 * @param <A>            泛型标记
+	 * @return {Annotation}
+	 */
+	public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType) {
+		Class<?> targetClass = method.getDeclaringClass();
+		// The method may be on an interface, but we need attributes from the target class.
+		// If the target class is null, the method will be unchanged.
+		Method specificMethod = ClassUtil.getMostSpecificMethod(method, targetClass);
+		// If we are dealing with method with generic parameters, find the original method.
+		specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
+		// 先找方法,再找方法上的类
+		A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
+		;
+		if (null != annotation) {
+			return annotation;
+		}
+		// 获取类上面的Annotation,可能包含组合注解,故采用spring的工具类
+		return AnnotatedElementUtils.findMergedAnnotation(specificMethod.getDeclaringClass(), annotationType);
+	}
+
+	/**
+	 * 获取Annotation
+	 *
+	 * @param handlerMethod  HandlerMethod
+	 * @param annotationType 注解类
+	 * @param <A>            泛型标记
+	 * @return {Annotation}
+	 */
+	public static <A extends Annotation> A getAnnotation(HandlerMethod handlerMethod, Class<A> annotationType) {
+		// 先找方法,再找方法上的类
+		A annotation = handlerMethod.getMethodAnnotation(annotationType);
+		if (null != annotation) {
+			return annotation;
+		}
+		// 获取类上面的Annotation,可能包含组合注解,故采用spring的工具类
+		Class<?> beanType = handlerMethod.getBeanType();
+		return AnnotatedElementUtils.findMergedAnnotation(beanType, annotationType);
+	}
+
+}

+ 67 - 5
toolset/utils/src/main/java/com/yonge/toolset/utils/string/StringUtil.java → toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/StringUtil.java

@@ -1,12 +1,11 @@
-package com.yonge.toolset.utils.string;
+package com.yonge.toolset.base.util;
 
+import com.yonge.toolset.base.string.CharPool;
+import com.yonge.toolset.base.string.StringPool;
 import org.springframework.lang.Nullable;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 /**
  * @Author: liweifan
@@ -22,6 +21,18 @@ public class StringUtil {
     }
 
     /**
+     * 分割 字符串 删除常见 空白符
+     *
+     * @param str       字符串
+     * @param delimiter 分割符
+     * @return 字符串数组
+     */
+    public static String[] splitTrim(@Nullable String str, @Nullable String delimiter) {
+        return StringUtil.delimitedListToStringArray(str, delimiter, " \t\n\n\f");
+    }
+
+
+    /**
      * 首字母变小写
      *
      * @param str 字符串
@@ -272,4 +283,55 @@ public class StringUtil {
             return sb.toString();
         }
     }
+
+    public static String[] delimitedListToStringArray(@Nullable String str, @Nullable String delimiter, @Nullable String charsToDelete) {
+        if (str == null) {
+            return new String[0];
+        } else if (delimiter == null) {
+            return new String[]{str};
+        } else {
+            List<String> result = new ArrayList();
+            int pos;
+            if (delimiter.isEmpty()) {
+                for(pos = 0; pos < str.length(); ++pos) {
+                    result.add(deleteAny(str.substring(pos, pos + 1), charsToDelete));
+                }
+            } else {
+                int delPos;
+                for(pos = 0; (delPos = str.indexOf(delimiter, pos)) != -1; pos = delPos + delimiter.length()) {
+                    result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
+                }
+
+                if (str.length() > 0 && pos <= str.length()) {
+                    result.add(deleteAny(str.substring(pos), charsToDelete));
+                }
+            }
+
+            return toStringArray((Collection)result);
+        }
+    }
+
+    public static String[] toStringArray(@Nullable Collection<String> collection) {
+        return collection != null ? (String[])collection.toArray(new String[0]) : new String[0];
+    }
+
+    public static String deleteAny(String inString, @Nullable String charsToDelete) {
+        if (hasLength(inString) && hasLength(charsToDelete)) {
+            StringBuilder sb = new StringBuilder(inString.length());
+
+            for(int i = 0; i < inString.length(); ++i) {
+                char c = inString.charAt(i);
+                if (charsToDelete.indexOf(c) == -1) {
+                    sb.append(c);
+                }
+            }
+
+            return sb.toString();
+        } else {
+            return inString;
+        }
+    }
+    public static boolean hasLength(@Nullable String str) {
+        return str != null && !str.isEmpty();
+    }
 }

+ 1 - 1
toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.base.util.StringUtil;
 import org.springframework.beans.BeanUtils;
 
 import java.util.Map;

+ 1 - 1
toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/SqlKeyword.java

@@ -2,9 +2,9 @@ package com.yonge.toolset.mybatis.support;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.obj.ObjectUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;

+ 1 - 1
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java

@@ -6,6 +6,7 @@ import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.huifu.adapay.core.util.AdapaySign;
 import com.huifu.adapay.model.Refund;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.adapay.constant.AdapayConstant;
 import com.yonge.toolset.payment.base.PaymentTemplate;
 import com.yonge.toolset.payment.base.enums.*;
@@ -19,7 +20,6 @@ import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.base.model.callback.RefundPaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/core/service/impl/SysConfigPaymentServiceImpl.java

@@ -2,12 +2,12 @@ package com.yonge.toolset.payment.core.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.core.dao.SysConfigPaymentDao;
 import com.yonge.toolset.payment.core.entity.SysConfigPayment;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;

+ 1 - 2
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java

@@ -14,6 +14,7 @@ import com.alipay.api.response.AlipayTradeQueryResponse;
 import com.alipay.api.response.AlipayTradeRefundResponse;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.PaymentTemplate;
 import com.yonge.toolset.payment.base.constant.PaymentConstant;
 import com.yonge.toolset.payment.base.enums.*;
@@ -26,8 +27,6 @@ import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
 import com.yonge.toolset.payment.core.util.RequestKitBean;
 import com.yonge.toolset.payment.original.ali.constant.AlipayConstant;
-import com.yonge.toolset.payment.original.wx.constant.WxpayConstant;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/OriginalWxAppTemplate.java

@@ -13,6 +13,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.github.binarywang.wxpay.util.SignUtils;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.base.PaymentTemplate;
 import com.yonge.toolset.payment.base.enums.*;
 import com.yonge.toolset.payment.base.model.ClosePayment;
@@ -25,7 +26,6 @@ import com.yonge.toolset.payment.base.model.callback.RefundPaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
 import com.yonge.toolset.payment.original.wx.constant.WxpayConstant;
-import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.web.WebUtil;
 import org.joda.time.DateTime;
 import org.slf4j.Logger;

+ 0 - 5
toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelUtils.java

@@ -1,11 +1,8 @@
 package com.yonge.toolset.utils.easyexcel;
 
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.util.CollectionUtils;
-import com.alibaba.excel.util.DateUtils;
-import com.yonge.toolset.utils.string.StringUtil;
 import org.apache.commons.codec.Charsets;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -19,9 +16,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * 导入数据工具包