Przeglądaj źródła

二维码登录接口

liweifan 3 lat temu
rodzic
commit
d2317bc504
14 zmienionych plików z 303 dodań i 123 usunięć
  1. 16 5
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/QRLoginDto.java
  2. 9 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/LoginEntity.java
  3. 4 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebSecurityConfig.java
  4. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/PhoneLoginAuthenticationFilter.java
  5. 13 4
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  6. 42 39
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  7. 8 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  8. 25 4
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  9. 24 16
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  10. 29 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/AuthUser.java
  11. 2 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/IdGeneratorService.java
  12. 2 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/impl/RedisIdGeneratorService.java
  13. 2 52
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/TokenUtil.java
  14. 124 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java

+ 16 - 5
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/QRLoginDto.java

@@ -34,8 +34,11 @@ public class QRLoginDto implements Serializable {
     @ApiModelProperty(value = "登录用户 STUDENT 学生 TEACHER 老师")
 	private String userType;
 
+	@ApiModelProperty(value = "手机号")
+	private String phone;
+
     @ApiModelProperty(value = "登录token")
-    private Object token;
+    private Object authentication;
 
 	public String getCode() {
 		return code;
@@ -85,12 +88,20 @@ public class QRLoginDto implements Serializable {
 		this.userType = userType;
 	}
 
-	public Object getToken() {
-		return token;
+	public Object getAuthentication() {
+		return authentication;
+	}
+
+	public void setAuthentication(Object authentication) {
+		this.authentication = authentication;
+	}
+
+	public String getPhone() {
+		return phone;
 	}
 
-	public void setToken(Object token) {
-		this.token = token;
+	public void setPhone(String phone) {
+		this.phone = phone;
 	}
 
 	@Override

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

@@ -16,6 +16,8 @@ public class LoginEntity {
     private String phone;
     
     private String deviceNum;
+    //二维码code
+    private String qrCode;
     
     public Boolean getIsSurportRegister() {
 		return isSurportRegister;
@@ -73,4 +75,11 @@ public class LoginEntity {
 		this.deviceNum = deviceNum;
 	}
 
+    public String getQrCode() {
+        return qrCode;
+    }
+
+    public void setQrCode(String qrCode) {
+        this.qrCode = qrCode;
+    }
 }

+ 4 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebSecurityConfig.java

@@ -66,7 +66,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 				//.exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()// 当未登录访问资源时
 				// 请求授权
 				.authorizeRequests()// 不需要权限认证的url
-				.antMatchers("/usernameLogin","/smsLogin", "/refreshToken", "/v2/api-docs").permitAll()// 任何请求
+				.antMatchers("/usernameLogin","/smsLogin", "/refreshToken",
+						"/getQRLoginCode","/pollingQRLoginCode","/v2/api-docs").permitAll()// 任何请求
 				.anyRequest()// 需要身份认证
 				.authenticated().and()// 关闭跨站请求防护
 				.csrf().disable();
@@ -74,7 +75,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
 	@Override
 	public void configure(WebSecurity web) throws Exception {
-		web.ignoring().antMatchers("/usernameLogin", "/smsLogin", "/refreshToken", "/v2/api-docs","/loginIn","/user/updatePassword");
+		web.ignoring().antMatchers("/usernameLogin", "/smsLogin", "/refreshToken",
+				"/getQRLoginCode","/pollingQRLoginCode", "/v2/api-docs","/loginIn","/user/updatePassword");
 	}
 
 	@Bean

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

@@ -26,6 +26,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 	private static final String clientIdParameter = "clientId";
 	private static final String IS_SURPORT_REGISTER = "isSurportRegister";
 	private static final String LOGIN_USER_TYPE = "loginUserType";
+	private static final String QR_CODE = "qrCode";
 
 	private static final String DEVICE_NUM = "deviceNum";
 
@@ -49,6 +50,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		
 		boolean isRegister = StringUtils.equals("true", request.getParameter(IS_SURPORT_REGISTER));
 		String loginUserType = obtainParameter(request, LOGIN_USER_TYPE);
+		String qrCode = obtainParameter(request, QR_CODE);
 
 		String clientId = request.getParameter(clientIdParameter).toUpperCase();
 
@@ -67,6 +69,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		loginEntity.setIsSurportRegister(isRegister);
 		loginEntity.setLoginUserType(loginUserType);
 		loginEntity.setDeviceNum(deviceNum);
+		loginEntity.setQrCode(qrCode);
 
 		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);
 

+ 13 - 4
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -49,10 +49,19 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
         String smsCode = loginEntity.getSmsCode();
         String phone = loginEntity.getPhone();
-        // 验证码验证
-        boolean b = smsCodeService.verifyValidCode(phone, smsCode, "SMS_VERIFY_CODE_LOGIN");
-        if (!b) {
-            throw new BadCredentialsException("验证码校验失败");
+        String qrCode = loginEntity.getQrCode();
+        if(StringUtils.isNotEmpty(qrCode) && StringUtils.isEmpty(smsCode)){
+            // 二维码验证
+            boolean b = sysUserService.verifyQrCode(phone, qrCode);
+            if (!b) {
+                throw new BadCredentialsException("二维码校验失败");
+            }
+        }else{
+            // 验证码验证
+            boolean b = smsCodeService.verifyValidCode(phone, smsCode, "SMS_VERIFY_CODE_LOGIN");
+            if (!b) {
+                throw new BadCredentialsException("验证码校验失败");
+            }
         }
 
         String clientId = loginEntity.getClientId();

+ 42 - 39
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.auth.core.provider.service;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.yonge.cooleshow.common.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.LockedException;
@@ -24,57 +25,59 @@ import com.yonge.cooleshow.common.security.SecurityConstants;
 @Service
 public class DefaultUserDetailsService implements UserDetailsService {
 
-	@Autowired
-	private PasswordEncoder passwordEncoder;
+    @Autowired
+    private PasswordEncoder passwordEncoder;
 
-	@Autowired
-	private SysUserService sysUserService;
+    @Autowired
+    private SysUserService sysUserService;
 
-	private final String BCRYPT = "{bcrypt}";
+    private final String BCRYPT = "{bcrypt}";
 
-	@Override
-	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-		if (StringUtils.isBlank(username)) {
-			return null;
-		}
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        if (StringUtils.isBlank(username)) {
+            return null;
+        }
 
-		SysUserInfo userInfo = null;
+        SysUserInfo userInfo = null;
 
-		if (StringUtils.startsWith(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX)) {
-			userInfo = sysUserService.queryUserInfoByPhone(StringUtils.substringAfter(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX));
-		} else if (StringUtils.startsWith(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX)) {
-			userInfo = sysUserService.queryUserInfoByUsername(StringUtils.substringAfter(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX));
-		} else {
-			userInfo = sysUserService.queryUserInfoByUsername(username);
-		}
-		if (userInfo == null) {
-			throw new UsernameNotFoundException("账户不存在");
-		} else if (userInfo.getSysUser().getLockFlag() == 9) {
-			throw new LockedException("账户被锁定");
-		}
+        if (StringUtils.startsWith(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX)) {
+            userInfo = sysUserService.queryUserInfoByPhone(StringUtils.substringAfter(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX));
+        } else if (StringUtils.startsWith(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX)) {
+            userInfo = sysUserService.queryUserInfoByUsername(StringUtils.substringAfter(username, SecurityConstants.USERNAME_PRINCIPAL_PREFIX));
+        } else {
+            userInfo = sysUserService.queryUserInfoByUsername(username);
+        }
+        if (userInfo == null) {
+            throw new UsernameNotFoundException("账户不存在");
+        } else if (userInfo.getSysUser().getLockFlag() == 9) {
+            throw new LockedException("账户被锁定");
+        }
 
-		List<GrantedAuthority> authorities = null;
+        List<GrantedAuthority> authorities = null;
 
-		String userType = userInfo.getSysUser().getUserType();
-		String[] roles = userType.split(",");
+        String userType = userInfo.getSysUser().getUserType();
+        String[] roles = userType.split(",");
 
-		if (userType.contains("SYSTEM")) {
-			authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());
-		}
+        if (userType.contains("SYSTEM")) {
+            authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());
+        }
 
-		if (authorities == null) {
-			authorities = new ArrayList<>();
-		}
+        if (authorities == null) {
+            authorities = new ArrayList<>();
+        }
 
-		authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(userType)));
+        authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(userType)));
 
-		for (String role : roles) {
-			authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(role)));
-		}
+        for (String role : roles) {
+            authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(role)));
+        }
 
-		SysUser sysUser = userInfo.getSysUser();
+        SysUser sysUser = userInfo.getSysUser();
 
-		return new AuthUser(sysUser.getId(), username, BCRYPT + sysUser.getPassword(), sysUser.getLockFlag() == 0, true, true, true, authorities);
-	}
+        String clientId = WebUtil.getParameter("clientId");
+        String clientSecret = WebUtil.getParameter("clientSecret");
+        return new AuthUser(sysUser.getId(), username, BCRYPT + sysUser.getPassword(), sysUser.getLockFlag() == 0, true, true, true, authorities, clientId, clientSecret);
+    }
 
 }

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

@@ -185,4 +185,12 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @return
      */
     List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
+
+    /**
+     * 校验二维码
+     * @param phone
+     * @param qrCode
+     * @return
+     */
+    boolean verifyQrCode(String phone, String qrCode);
 }

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

@@ -3,19 +3,21 @@ package com.yonge.cooleshow.auth.service.impl;
 import java.util.Date;
 import java.util.List;
 
+import com.yonge.cooleshow.auth.api.dto.*;
 import com.yonge.cooleshow.auth.config.RongCloudConfig;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.security.AuthUser;
+import com.yonge.cooleshow.common.security.SecurityUtils;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import io.rong.models.user.UserModel;
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
-import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
-import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
-import com.yonge.cooleshow.auth.api.dto.UserSetReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.vo.UserSetVo;
 import com.yonge.cooleshow.auth.dal.dao.SysUserDao;
@@ -39,6 +41,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     private SysRoleMenuService sysRoleMenuService;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Override
     public BaseDAO<Long, SysUser> getDAO() {
@@ -246,4 +250,21 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         return sysUserDao.queryEmployeeList(queryInfo);
     }
 
+    @Override
+    public boolean verifyQrCode(String phone, String qrCode) {
+        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(qrCode)){
+            return false;
+        }
+        Object data = redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(qrCode))
+                .get();
+        if (null == data) {
+            return false;
+        }
+        QRLoginDto dto = (QRLoginDto) data;
+        if(phone.equals(dto.getPhone()) && qrCode.equals(dto.getCode())){
+            return true;
+        }
+        return false;
+    }
+
 }

+ 24 - 16
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.auth.web.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
 import com.yonge.cooleshow.auth.api.dto.QRLoginDto;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.util.TokenUtil;
@@ -248,36 +250,42 @@ public class TokenController extends BaseController {
         if (authUser == null) {
             return HttpResponseResult.failed("请先登录");
         }
+        SysUser sysUser = userService.get(authUser.getUserId());
+
         QRLoginDto dto = (QRLoginDto) data;
         dto.setCodeStatus("scanned");
-        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto,5,TimeUnit.MINUTES);
+        dto.setPhone(sysUser.getPhone());
+        dto.setUserType(authUser.getClientId().toUpperCase());
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto, 5, TimeUnit.MINUTES);
 
-        String url = "http://auth-server/oauth/token";
+        String url = "http://auth-server/smsLogin";
 
-        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);
+        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
 
-        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");
+        url += "?clientId=" + dto.getClientId();
+        url += "&clientSecret=" + dto.getClientSecret();
+        url += "&phone=" + sysUser.getPhone();
+        url += "&qrCode=" + code;
+        url += "&loginUserType=" + authUser.getClientId().toUpperCase();
 
-        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(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);
+        Boolean status = (Boolean)map.get("status");
+        if(status){
+            dto.setCodeStatus("succeed");
+            Object obj = JSONObject.parseObject(JSONObject.toJSONString(map.get("data"))).get("authentication");
+            dto.setAuthentication(obj);
+        }else{
+            dto.setCodeStatus("filed");
+        }
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto, 5, TimeUnit.MINUTES);
         return succeed(dto);
     }
 

+ 29 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/AuthUser.java

@@ -17,10 +17,23 @@ public class AuthUser extends User {
 	 */
 	private Long userId;
 
+	/**
+	 *
+	 */
+	private String clientId;
+
+	/**
+	 *
+	 */
+	private String clientSecret;
+
 	public AuthUser(Long userId, String username, String password, boolean enabled, boolean accountNonExpired,
-			boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
+			boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities,
+					String clientId,String clientSecret) {
 		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
 		this.userId = userId;
+		this.clientId = clientId;
+		this.clientSecret = clientSecret;
 	}
 
 	public Long getUserId() {
@@ -31,4 +44,19 @@ public class AuthUser extends User {
 		this.userId = userId;
 	}
 
+	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;
+	}
 }

+ 2 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/IdGeneratorService.java

@@ -22,4 +22,6 @@ public interface IdGeneratorService {
 	 * @return
 	 */
 	boolean verifyValidCode(String mobile, String authCode,String keyEnum);
+
+
 }

+ 2 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/impl/RedisIdGeneratorService.java

@@ -111,4 +111,6 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 		return false;
 	}
 
+
+
 }

+ 2 - 52
cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/TokenUtil.java

@@ -1,15 +1,10 @@
 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;
-
 /**
  * 认证工具类
  */
@@ -23,57 +18,12 @@ public class TokenUtil {
     /**
      * 解码
      */
-    public static String getAuthorization() {
+    public static String getToken() {
         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信息");
-        }
+        return header.replace(HEADER_PREFIX,StringPool.EMPTY);
     }
 
-    /**
-     * 获取请求头中的客户端id
-     */
-    public static String getClientIdFromHeader() {
-        String[] tokens = extractAndDecodeHeader();
-        return tokens[0];
-    }
-
-    /**
-     * 获取请求头中的客户端secret
-     */
-    public static String getClientSecretFromHeader() {
-        String[] tokens = extractAndDecodeHeader();
-        return tokens[1];
-    }
-
-
 }

+ 124 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java

@@ -0,0 +1,124 @@
+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.dto.TeacherDto;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
+import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
+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.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("/teacher")
+@Api(value = "教师表", tags = "教师表")
+public class TeacherController extends BaseController {
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "我的-查询教师基本信息")
+    @GetMapping("/queryUserInfo")
+    public HttpResponseResult<TeacherHomeVo> queryUserInfo() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return teacherService.queryUserInfo(user.getId());
+    }
+
+    @ApiOperation(value = "开通直播")
+    @GetMapping("/openLive")
+    public HttpResponseResult<Boolean> openLive() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return teacherService.openLive(user.getId());
+    }
+
+    @ApiOperation(value = "获取老师可授课声部列表")
+    @PostMapping("/querySubject")
+    public HttpResponseResult<List<Subject>> querySubject() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(teacherService.querySubject(user.getId()));
+    }
+
+    @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(teacherService.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(teacherService.querySubjectItem(user.getId()));
+    }
+
+    @ApiOperation(value = "我的-个人风采")
+    @GetMapping("/queryTeacherStyle")
+    public HttpResponseResult<TeacherVo> queryTeacherStyle() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return HttpResponseResult.succeed(teacherService.detail(user.getId()));
+    }
+
+    @ApiOperation(value = "我的-个人风采保存")
+    @PostMapping("/saveTeacherStyle")
+    public HttpResponseResult<TeacherVo> saveTeacherStyle(@RequestBody TeacherDto teacherDto) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (StringUtil.isEmpty(teacherDto.getSubjectId())) {
+            return failed("参数异常");
+        }
+        teacherDto.setUserId(user.getId());
+        return teacherService.saveTeacherStyle(teacherDto);
+    }
+
+    @ApiOperation(value = "我的粉丝")
+    @PostMapping(value = "/queryMyFans")
+    public HttpResponseResult<PageInfo<MyFens>> queryMyFans(@RequestBody QueryInfo query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<MyFens> pages = teacherService.queryMyFans(PageUtil.getPage(query), sysUser.getId());
+        return succeed(PageUtil.pageInfo(pages));
+    }
+}