Parcourir la source

Merge remote-tracking branch 'origin/master'

zouxuan il y a 3 ans
Parent
commit
ec4e4a4d3e
72 fichiers modifiés avec 1098 ajouts et 338 suppressions
  1. 0 2
      audio-analysis/pom.xml
  2. 1 1
      audio-analysis/src/main/resources/bootstrap-dev.yml
  3. 16 5
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/QRLoginDto.java
  4. 0 10
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/RealnameAuthReq.java
  5. 9 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/LoginEntity.java
  6. 4 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebSecurityConfig.java
  7. 3 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/PhoneLoginAuthenticationFilter.java
  8. 13 7
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  9. 42 39
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  10. 8 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  11. 27 6
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  12. 62 45
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  13. 0 6
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  14. 0 3
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  15. 17 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java
  16. 17 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsCollectController.java
  17. 17 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsFollowController.java
  18. 15 63
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsLikeController.java
  19. 13 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsReplyController.java
  20. 11 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java
  21. 2 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsReplyDao.java
  22. 20 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsReplySearch.java
  23. 5 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsReply.java
  24. 12 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java
  25. 2 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsCollectService.java
  26. 2 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsFollowService.java
  27. 4 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsLikeService.java
  28. 6 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsReplyService.java
  29. 44 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java
  30. 14 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java
  31. 23 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsCollectServiceImpl.java
  32. 31 5
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsFollowServiceImpl.java
  33. 23 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsLikeServiceImpl.java
  34. 43 8
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsReplyServiceImpl.java
  35. 25 7
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsArticleVo.java
  36. 35 7
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsReplyVo.java
  37. 46 0
      cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml
  38. 3 0
      cooleshow-bbs/src/main/resources/config/mybatis/BbsReplyMapper.xml
  39. 2 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  40. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/SysUserType.java
  41. 29 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/security/AuthUser.java
  42. 2 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/IdGeneratorService.java
  43. 2 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/impl/RedisIdGeneratorService.java
  44. 2 52
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/util/TokenUtil.java
  45. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  46. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java
  47. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java
  48. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  49. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  50. 26 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  51. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  52. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/EmployeeServiceImpl.java
  53. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  54. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  55. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  56. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleHomeworkVo.java
  57. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleRecordVo.java
  58. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeworkVo.java
  59. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeStatisticalVo.java
  60. 9 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  61. 3 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml
  62. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  63. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  64. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java
  65. 6 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherHomeController.java
  66. 12 5
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicAlbumController.java
  67. 0 7
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java
  68. 88 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/SmsCodeController.java
  69. 124 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java
  70. 58 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/WebSiteController.java
  71. 4 4
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicAlbumController.java
  72. 0 8
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicSheetController.java

+ 0 - 2
audio-analysis/pom.xml

@@ -67,8 +67,6 @@
 			<groupId>com.yonge.cooleshow</groupId>
 			<artifactId>user-biz</artifactId>
 			<exclusions>
-				<!-- <exclusion> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> 
-					</exclusion> -->
 				<exclusion>
 					<artifactId>netty-common</artifactId>
 					<groupId>io.netty</groupId>

+ 1 - 1
audio-analysis/src/main/resources/bootstrap-dev.yml

@@ -5,7 +5,7 @@ spring:
         server-addr: 47.114.1.200:8848
         namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
         group: DEFAULT_GROUP
-        prefix: audio-analysis-dev
+        prefix: audio-analysis
         file-extension: yaml
         enabled: true
         refresh-enabled: true

+ 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

+ 0 - 10
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/RealnameAuthReq.java

@@ -34,8 +34,6 @@ public class RealnameAuthReq implements Serializable {
     private int gender;
     // 出生日期
     private Date birthday;
-    // 头像
-    private String avatar;
 
     public Long getUserId() {
         return userId;
@@ -84,12 +82,4 @@ public class RealnameAuthReq implements Serializable {
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
     }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
 }

+ 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 - 7
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -33,7 +33,6 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
     @Override
     protected void additionalAuthenticationChecks(UserDetails userDetails, Authentication authentication) throws AuthenticationException {
-
         if (authentication.getCredentials() == null) {
             throw new BadCredentialsException(this.messages.getMessage("PhoneAuthenticationProvider.badCredentials", "Bad credentials"));
         }
@@ -49,10 +48,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();
@@ -66,7 +74,6 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
             if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
                 throw new LockedException("用户不存在");
             }
-
             userInfo = sysUserService.registerUser(loginEntity.getPhone(), clientId, loginUserType);
 
             if (StringUtils.isNotBlank(deviceNum)) {
@@ -111,7 +118,6 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                     sysUserService.update(user);
                 }
             }
-
         }
 
         UserDetails loadedUser;

+ 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);
 }

+ 27 - 6
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() {
@@ -160,7 +164,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         sysUser.setPhone(phone);
         String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
         sysUser.setAvatar(defaultHeard);
-
+        sysUser.setGender(1);
         sysUser.setUserType("TEACHER");
         sysUserDao.insert(sysUser);
         //创建teacher表
@@ -178,7 +182,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         sysUser.setPhone(phone);
         String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
         sysUser.setAvatar(defaultHeard);
-
+        sysUser.setGender(1);
         sysUser.setUserType("STUDENT");
         sysUserDao.insert(sysUser);
         saveStudent(sysUser);
@@ -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;
+    }
+
 }

+ 62 - 45
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;
@@ -68,10 +70,14 @@ public class TokenController extends BaseController {
 
     @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"),
+    @ApiImplicitParams({
             @ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "smsCode", value = "验证码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "isSurportRegister", value = "是否在登录时注册", dataType = "Boolean"),
+            @ApiImplicitParam(name = "loginUserType", value = "登录用户类型 STUDENT TEACHER(官网登录)", dataType = "String")
+    })
     public Object smsLogin() {
         return succeed();
     }
@@ -97,10 +103,13 @@ public class TokenController extends BaseController {
 
     @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"),
+    @ApiImplicitParams({
             @ApiImplicitParam(name = "clientId", value = "固定传 app", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "username", value = "手机号", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "clientSecret", value = "固定传 app", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "username", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "loginUserType", value = "登录用户类型 STUDENT TEACHER(官网登录)", dataType = "String")
+    })
     public Object usernameLogin() {
         return succeed();
     }
@@ -175,13 +184,8 @@ public class TokenController extends BaseController {
     }
 
 
-    /**
-     * 获取二维码登录code(不需要鉴权)
-     *
-     * @return
-     */
     @GetMapping("/getQRLoginCode")
-    @ApiOperation(value = "获取二维码登录code")
+    @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) {
@@ -206,13 +210,8 @@ public class TokenController extends BaseController {
     }
 
 
-    /**
-     * 前端轮询登录(不需要鉴权)
-     *
-     * @return
-     */
     @GetMapping("/pollingQRLoginCode")
-    @ApiOperation(value = "获取二维码登录code")
+    @ApiOperation(value = "前端轮询登录(不需要鉴权)")
     public HttpResponseResult<QRLoginDto> pollingQRLoginCode(@ApiParam(value = "二维码登录code", required = true) @RequestParam("code") String code) {
         if (StringUtil.isEmpty(code)) {
             return HttpResponseResult.failed("登录失败");
@@ -223,62 +222,80 @@ public class TokenController extends BaseController {
             QRLoginDto dto = (QRLoginDto) data;
             return HttpResponseResult.succeed(dto);
         } else {
-            return HttpResponseResult.failed("二维码已过期");
+            return HttpResponseResult.succeed("二维码已过期");
         }
     }
 
-    /**
-     * 二维码登录
-     *
-     * @return
-     * @throws IOException
-     */
     @GetMapping(value = "/qrLogin")
-    @ApiOperation(value = "二维码登录")
+    @ApiOperation(value = "二维码登录-扫码")
     public HttpResponseResult<QRLoginDto> qrLogin(
             @ApiParam(value = "二维码登录code", required = true) @RequestParam("code") String code
     ) throws IOException {
+        AuthUser authUser = SecurityUtils.getUser();
+        if (authUser == null) {
+            return HttpResponseResult.failed("请先登录");
+        }
+        SysUser sysUser = userService.get(authUser.getUserId());
+
         Object data = redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code))
                 .get();
         if (null == data) {
             return HttpResponseResult.failed("二维码已过期");
         }
+        QRLoginDto dto = (QRLoginDto) data;
+        dto.setCodeStatus("scanned");
+        dto.setPhone(sysUser.getPhone());
+        dto.setUserType(authUser.getClientId().toUpperCase());
+        redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code)).set(dto, 5, TimeUnit.MINUTES);
+        return succeed(dto);
+    }
 
+    @GetMapping(value = "/doQrLogin")
+    @ApiOperation(value = "二维码登录-确认登录")
+    public HttpResponseResult<QRLoginDto> doQrLogin(
+            @ApiParam(value = "二维码登录code", required = true) @RequestParam("code") String code
+    ) throws IOException {
         AuthUser authUser = SecurityUtils.getUser();
         if (authUser == null) {
             return HttpResponseResult.failed("请先登录");
         }
+        SysUser sysUser = userService.get(authUser.getUserId());
+
+        Object data = redissonClient.getBucket(CacheNameEnum.QR_LOGIN_CODE.getRedisKey(code))
+                .get();
+        if (null == data) {
+            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 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);
-        return succeed(dto);
+        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 HttpResponseResult.succeed(dto);
     }
-
 }

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

@@ -508,15 +508,9 @@ public class UserController extends BaseController {
         }
 
         if (realNameAuthDto.getSave()) {
-            String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
-            if (StringUtil.isEmpty(user.getAvatar()) || user.getAvatar().equals(defaultHeard)) {
-                user.setAvatar(
-                        0 == idcardInfoExtractor.getGender() ? sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD_GIRL) : sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD_BOY));
-            }
             realNameAuthDto.setUserId(user.getId());
             realNameAuthDto.setGender(idcardInfoExtractor.getGender());
             realNameAuthDto.setBirthday(idcardInfoExtractor.getBirthday());
-            realNameAuthDto.setAvatar(user.getAvatar());
             //实名认证通过后立刻保存
             sysUserService.updateUserCard(realNameAuthDto);
         }

+ 0 - 3
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -220,9 +220,6 @@
             <if test="param.birthday != null">
                 birthdate_ = #{param.birthday},
             </if>
-            <if test="param.avatar != null and param.avatar != ''">
-                avatar_ = #{param.avatar},
-            </if>
         update_time_ = now()
         WHERE id_ = #{param.userId}
     </update>

+ 17 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java

@@ -3,10 +3,13 @@ package com.yonge.cooleshow.bbs.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.bbs.dto.search.BbsReplySearch;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.valid.AddGroup;
 import com.yonge.cooleshow.bbs.valid.OtherGroup;
 import com.yonge.cooleshow.bbs.valid.UpdateGroup;
+import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
+import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -23,6 +26,7 @@ import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
 
+import javax.validation.constraints.NotNull;
 import java.util.List;
 import java.util.Map;
 
@@ -78,4 +82,17 @@ public class BbsArticleController extends BaseController {
         bbsArticleService.articleTop(article);
         return succeed();
     }
+
+    @GetMapping("/info")
+    @ApiOperation(value = "详情-文章")
+    public HttpResponseResult<BbsArticleVo> articleInfo(@NotNull Long articleId) {
+        return succeed(bbsArticleService.articleInfo(articleId));
+    }
+
+    @PostMapping("/reply")
+    @ApiOperation(value = "详情-文章评论列表")
+    public HttpResponseResult<PageInfo<BbsReplyVo>> articleReply(@RequestBody BbsReplySearch query) {
+        IPage<BbsReplyVo> pages =bbsArticleService.articleReply(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+    }
 }

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

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.bbs.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.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -10,9 +12,11 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 
 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 javax.validation.constraints.NotNull;
 
 import com.yonge.cooleshow.bbs.vo.BbsCollectVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsCollectSearch;
@@ -23,10 +27,22 @@ import com.yonge.cooleshow.bbs.service.BbsCollectService;
 @RequestMapping("/bbsCollect")
 @Api(value = "收藏", tags = "收藏")
 public class BbsCollectController extends BaseController {
-
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
     @Autowired
     private BbsCollectService bbsCollectService;
 
+	@GetMapping("/collect")
+	@ApiOperation(value = "详情-收藏/取消收藏")
+	public HttpResponseResult collect(@NotNull Long articleId) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		bbsCollectService.collect(user.getId(), articleId);
+		return succeed();
+	}
+
 	/**
      * 查询单条
      */

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

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.bbs.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.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -10,9 +12,11 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 
 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 javax.validation.constraints.NotNull;
 
 import com.yonge.cooleshow.bbs.vo.BbsFollowVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsFollowSearch;
@@ -23,9 +27,21 @@ import com.yonge.cooleshow.bbs.service.BbsFollowService;
 @RequestMapping("/bbsFollow")
 @Api(value = "关注", tags = "关注")
 public class BbsFollowController extends BaseController {
-
     @Autowired
     private BbsFollowService bbsFollowService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@GetMapping("/follow")
+	@ApiOperation(value = "详情-关注/取消关注")
+	public HttpResponseResult follow(@NotNull Long followId) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		bbsFollowService.follow(user.getId(), followId);
+		return succeed();
+	}
 
 	/**
      * 查询单条

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

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.bbs.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
@@ -10,78 +10,30 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 
 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 javax.validation.constraints.NotNull;
 
-import com.yonge.cooleshow.bbs.vo.BbsLikeVo;
-import com.yonge.cooleshow.bbs.dto.search.BbsLikeSearch;
-import com.yonge.cooleshow.bbs.entity.BbsLike;
 import com.yonge.cooleshow.bbs.service.BbsLikeService;
 
 @RestController
 @RequestMapping("/bbsLike")
 @Api(value = "点赞", tags = "点赞")
 public class BbsLikeController extends BaseController {
-
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
     @Autowired
     private BbsLikeService bbsLikeService;
 
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<BbsLikeVo> detail(@PathVariable("id") Long id) {
-    	return succeed(bbsLikeService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入bbsLikeSearch")
-    public HttpResponseResult<PageInfo<BbsLikeVo>> page(@RequestBody BbsLikeSearch query) {
-		IPage<BbsLikeVo> pages = bbsLikeService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入bbsLike")
-	public HttpResponseResult save(@Valid @RequestBody BbsLike bbsLike) {
-    	return status(bbsLikeService.save(bbsLike));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入bbsLike")
-	public HttpResponseResult update(@Valid @RequestBody BbsLike bbsLike) {
-        return status(bbsLikeService.updateById(bbsLike));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入bbsLike")
-	public HttpResponseResult submit(@Valid @RequestBody BbsLike bbsLike) {
-        return status(bbsLikeService.saveOrUpdate(bbsLike));
+    @GetMapping("/like")
+    @ApiOperation(value = "详情-点赞/取消点赞")
+    public HttpResponseResult dolike(@NotNull Long articleId) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsLikeService.dolike(articleId, user.getId());
+        return succeed();
     }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(bbsLikeService.removeByIds(StringUtil.toLongList(ids)));
-	}
 }

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

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.dto.ReplyAuditDto;
 import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
+import com.yonge.cooleshow.bbs.entity.BbsReply;
 import com.yonge.cooleshow.bbs.service.BbsReplyService;
 import com.yonge.cooleshow.bbs.vo.BbsReplyAuditVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -15,6 +16,7 @@ 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -30,6 +32,17 @@ public class BbsReplyController extends BaseController {
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
+	@PostMapping("/reply")
+	@ApiOperation(value = "详情-评论文章")
+	public HttpResponseResult reply(@Validated @RequestBody BbsReply reply) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		reply.setUserId(user.getId());
+		bbsReplyService.replyArticle(reply);
+		return succeed();
+	}
 
 	@PostMapping("/audit/list")
 	@ApiOperation(value = "后台-评论审核列表")

+ 11 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java

@@ -4,6 +4,8 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
+import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
@@ -32,4 +34,13 @@ public interface BbsArticleDao extends BaseMapper<BbsArticle> {
      * @return: com.yonge.cooleshow.bbs.vo.BbsArticleVo
      */
     List<BbsArticleVo> selectPage(@Param("page") IPage page, @Param("param") BbsArticleSearch bbsArticle);
+
+    /**
+     * 查询文章详情
+     * @param articleId
+     * @return
+     */
+    BbsArticleVo articleInfo(Long articleId);
+
+    List<BbsReplyVo> articleReply(@Param("page")IPage<BbsReplyVo> page,@Param("param") BbsReplySearch query);
 }

+ 2 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsReplyDao.java

@@ -56,4 +56,6 @@ public interface BbsReplyDao extends BaseMapper<BbsReply> {
 	 * @return
 	 */
 	List<BbsReplyAuditVo> selectAuditListPage(@Param("page") IPage<BbsReplyAuditVo> page, @Param("query") BbsReplySearch query);
+
+	String selectConfig(String paramName);
 }

+ 20 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsReplySearch.java

@@ -19,6 +19,26 @@ public class BbsReplySearch extends QueryInfo{
 	@ApiModelProperty("评论审核状态 DOING :审核中,PASS:审核 通过,REJECT:拒绝")
 	private ArticleEnum status;
 
+	@ApiModelProperty(value = "文章id",hidden = true)
+	private Long articleId;
+	private Long parentId;
+
+	public Long getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(Long parentId) {
+		this.parentId = parentId;
+	}
+
+	public Long getArticleId() {
+		return articleId;
+	}
+
+	public void setArticleId(Long articleId) {
+		this.articleId = articleId;
+	}
+
 	public Long getUserId() {
 		return userId;
 	}

+ 5 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsReply.java

@@ -14,6 +14,9 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * 文章评论
  */
@@ -31,6 +34,7 @@ public class BbsReply implements Serializable {
 
     @ApiModelProperty("文章id")
     @TableField(value = "article_id")
+    @NotNull(message = "文章id不能为空")
     private Long articleId;
 
     @ApiModelProperty("评论者id")
@@ -39,6 +43,7 @@ public class BbsReply implements Serializable {
 
     @ApiModelProperty("评论内容")
     @TableField(value = "content_")
+    @NotBlank(message = "评论内容不能为空")
     private String content;
 
     @ApiModelProperty("审核中:DOING,通过:PASS,驳回:REJECT")

+ 12 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java

@@ -3,9 +3,11 @@ package com.yonge.cooleshow.bbs.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
+import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
 
 import java.util.List;
 import java.util.Map;
@@ -53,4 +55,14 @@ public interface BbsArticleService extends IService<BbsArticle> {
      * @date 2022-06-09
      */
     IPage<BbsArticleVo> selectPage(IPage<BbsArticleVo> page, BbsArticleSearch query);
+
+    /**
+     * 查询详情
+     *
+     * @param articleId
+     * @return
+     */
+    BbsArticleVo articleInfo(Long articleId);
+
+    IPage<BbsReplyVo> articleReply(IPage<BbsReplyVo> page, BbsReplySearch query);
 }

+ 2 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsCollectService.java

@@ -28,4 +28,6 @@ public interface BbsCollectService extends IService<BbsCollect>  {
  	 * @date 2022-06-09
      */
     IPage<BbsCollectVo> selectPage(IPage<BbsCollectVo> page, BbsCollectSearch query);
+
+    void collect(Long userId, Long articleId);
 }

+ 2 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsFollowService.java

@@ -26,4 +26,6 @@ public interface BbsFollowService extends IService<BbsFollow>  {
  	 * @date 2022-06-09
      */
     IPage<BbsFollowVo> selectPage(IPage<BbsFollowVo> page, BbsFollowSearch query);
+
+    void follow(Long userId, Long followId);
 }

+ 4 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsLikeService.java

@@ -2,12 +2,13 @@ package com.yonge.cooleshow.bbs.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.bbs.vo.BbsLikeVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsLikeSearch;
 import com.yonge.cooleshow.bbs.entity.BbsLike;
+import com.yonge.cooleshow.bbs.vo.BbsLikeVo;
 
 /**
  * 点赞 服务类
+ *
  * @author liweifan
  * @date 2022-06-09
  */
@@ -26,4 +27,6 @@ public interface BbsLikeService extends IService<BbsLike>  {
  	 * @date 2022-06-09
      */
     IPage<BbsLikeVo> selectPage(IPage<BbsLikeVo> page, BbsLikeSearch query);
+
+    void dolike(Long articleId, Long userId);
 }

+ 6 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsReplyService.java

@@ -63,4 +63,10 @@ public interface BbsReplyService extends IService<BbsReply>  {
 	 * @return
 	 */
 	boolean audit(ReplyAuditDto auditDto);
+
+	/**
+	 * 评论文章
+	 * @param reply
+	 */
+    void replyArticle(BbsReply reply);
 }

+ 44 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java

@@ -5,13 +5,16 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
 import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
 import com.yonge.toolset.base.exception.BizException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,13 +25,17 @@ import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
 public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle> implements BbsArticleService {
     private final static Logger log = LoggerFactory.getLogger(BbsArticleServiceImpl.class);
+    private final static String VIEW = "view";
 
+    @Resource(name = "redis1")
+    private RedisTemplate redisTemplate;
     @Autowired
     private BbsAuthRecordDao authRecordDao;
 
@@ -137,4 +144,40 @@ public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle
     public IPage<BbsArticleVo> selectPage(IPage<BbsArticleVo> page, BbsArticleSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
+
+    /**
+     * @Description: 查询文章详情
+     * @Author: cy
+     * @Date: 2022/6/14
+     */
+    @Override
+    public BbsArticleVo articleInfo(Long articleId) {
+        BbsArticleVo bbsArticle = baseMapper.articleInfo(articleId);
+        redisTemplate.opsForHash().increment(VIEW, String.valueOf(articleId), 1);
+        return bbsArticle;
+    }
+
+    /**
+     * @Description: 文章评论列表
+     * @Author: cy
+     * @Date: 2022/6/14
+     */
+    @Override
+    public IPage<BbsReplyVo> articleReply(IPage<BbsReplyVo> page, BbsReplySearch query) {
+        query.setStatus(ArticleEnum.PASS);
+        List<BbsReplyVo> allReply = baseMapper.articleReply(null, query);
+        for (BbsReplyVo replyVo : allReply) {
+            List<BbsReplyVo> list = new ArrayList<>();
+
+            findChildren(replyVo, list);
+            replyVo.setChildren(list);
+        }
+
+        return page.setRecords(allReply);
+    }
+
+
+    public void findChildren(BbsReplyVo replyVo, List<BbsReplyVo> list) {
+
+    }
 }

+ 14 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
 import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
 import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 import org.slf4j.Logger;
@@ -16,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
+
 @Service
 public class BbsAuthRecordServiceImpl extends ServiceImpl<BbsAuthRecordDao, BbsAuthRecord> implements BbsAuthRecordService {
     private final static Logger log = LoggerFactory.getLogger(BbsAuthRecordServiceImpl.class);
@@ -41,9 +44,17 @@ public class BbsAuthRecordServiceImpl extends ServiceImpl<BbsAuthRecordDao, BbsA
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateAuditState(BbsAuthRecord record) {
-        bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
-                .eq(BbsArticle::getId, record.getArticleId())
-                .set(BbsArticle::getStatus, record.getAuditState()));
+        ArticleEnum auditState = record.getAuditState();
+        if (auditState.equals(ArticleEnum.PASS)) {
+            bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
+                    .eq(BbsArticle::getId, record.getArticleId())
+                    .set(BbsArticle::getStatus, record.getAuditState())
+                    .set(BbsArticle::getExamineTime, new Date()));
+        } else {
+            bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
+                    .eq(BbsArticle::getId, record.getArticleId())
+                    .set(BbsArticle::getStatus, record.getAuditState()));
+        }
         baseMapper.insert(record);
     }
 }

+ 23 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsCollectServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
@@ -25,5 +26,26 @@ public class BbsCollectServiceImpl extends ServiceImpl<BbsCollectDao, BbsCollect
     public IPage<BbsCollectVo> selectPage(IPage<BbsCollectVo> page, BbsCollectSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    /**
+     * @Description: 收藏/取消收藏
+     * @Author: cy
+     * @Date: 2022/6/13
+     */
+    @Override
+    public void collect(Long userId, Long articleId) {
+        BbsCollect collect = baseMapper.selectOne(Wrappers.<BbsCollect>lambdaQuery()
+                .eq(BbsCollect::getArticleId, articleId)
+                .eq(BbsCollect::getCollectUserId, userId));
+        if (collect==null){
+            BbsCollect bbsCollect = new BbsCollect();
+            bbsCollect.setArticleId(articleId);
+            bbsCollect.setCollectUserId(userId);
+            baseMapper.insert(bbsCollect);
+        }else {
+            baseMapper.delete(Wrappers.<BbsCollect>lambdaQuery()
+                    .eq(BbsCollect::getArticleId, articleId)
+                    .eq(BbsCollect::getCollectUserId, userId));
+        }
+    }
 }

+ 31 - 5
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsFollowServiceImpl.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,20 +12,44 @@ import com.yonge.cooleshow.bbs.vo.BbsFollowVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsFollowSearch;
 import com.yonge.cooleshow.bbs.dao.BbsFollowDao;
 import com.yonge.cooleshow.bbs.service.BbsFollowService;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 
 @Service
 public class BbsFollowServiceImpl extends ServiceImpl<BbsFollowDao, BbsFollow> implements BbsFollowService {
     private final static Logger log = LoggerFactory.getLogger(BbsFollowServiceImpl.class);
 
-	@Override
+    @Override
     public BbsFollowVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
-     @Override
-    public IPage<BbsFollowVo> selectPage(IPage<BbsFollowVo> page, BbsFollowSearch query){
+
+    @Override
+    public IPage<BbsFollowVo> selectPage(IPage<BbsFollowVo> page, BbsFollowSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    /**
+     * @Description: 关注/取消关注
+     * @Author: cy
+     * @Date: 2022/6/13
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void follow(Long userId, Long followId) {
+        BbsFollow bbsFollow = baseMapper.selectOne(Wrappers.<BbsFollow>lambdaQuery()
+                .eq(BbsFollow::getUserId, userId)
+                .eq(BbsFollow::getFriendUserId, followId));
+        if (bbsFollow == null) {
+            BbsFollow follow = new BbsFollow();
+            follow.setUserId(userId);
+            follow.setFriendUserId(followId);
+            baseMapper.insert(follow);
+        } else {
+            baseMapper.delete(Wrappers.<BbsFollow>lambdaQuery()
+                    .eq(BbsFollow::getUserId, userId)
+                    .eq(BbsFollow::getFriendUserId, followId));
+        }
+    }
 }

+ 23 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsLikeServiceImpl.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,10 +12,15 @@ import com.yonge.cooleshow.bbs.dto.search.BbsLikeSearch;
 import com.yonge.cooleshow.bbs.dao.BbsLikeDao;
 import com.yonge.cooleshow.bbs.service.BbsLikeService;
 
+import javax.annotation.Resource;
 
 @Service
 public class BbsLikeServiceImpl extends ServiceImpl<BbsLikeDao, BbsLike> implements BbsLikeService {
     private final static Logger log = LoggerFactory.getLogger(BbsLikeServiceImpl.class);
+    private final static String LIKE = "like:";
+
+    @Resource(name = "redis1")
+    private RedisTemplate redisTemplate;
 
 	@Override
     public BbsLikeVo detail(Long id) {
@@ -25,5 +31,21 @@ public class BbsLikeServiceImpl extends ServiceImpl<BbsLikeDao, BbsLike> impleme
     public IPage<BbsLikeVo> selectPage(IPage<BbsLikeVo> page, BbsLikeSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    /**
+     * @Description: 点赞/取消点赞
+     * @Author: cy
+     * @Date: 2022/6/13
+     */
+    @Override
+    public void dolike(Long articleId, Long userId) {
+        String key = LIKE + articleId;
+        Boolean isLike = redisTemplate.opsForSet().isMember(key, userId);
+
+        if (isLike) {
+            redisTemplate.opsForSet().remove(key, userId);
+        } else {
+            redisTemplate.opsForSet().add(key, userId);
+        }
+    }
 }

+ 43 - 8
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsReplyServiceImpl.java

@@ -2,8 +2,14 @@ package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
+import com.yonge.cooleshow.bbs.dao.BbsReplyAuthRecordDao;
 import com.yonge.cooleshow.bbs.dto.ReplyAuditDto;
+import com.yonge.cooleshow.bbs.entity.BbsArticle;
+import com.yonge.cooleshow.bbs.entity.BbsReplyAuthRecord;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.cooleshow.bbs.service.BbsArticleService;
 import com.yonge.cooleshow.bbs.service.BbsReplyAuthRecordService;
 import com.yonge.cooleshow.bbs.vo.BbsReplyAuditVo;
 import com.yonge.toolset.base.exception.BizException;
@@ -22,17 +28,20 @@ import com.yonge.cooleshow.bbs.service.BbsReplyService;
 public class BbsReplyServiceImpl extends ServiceImpl<BbsReplyDao, BbsReply> implements BbsReplyService {
     private final static Logger log = LoggerFactory.getLogger(BbsReplyServiceImpl.class);
 
-
     @Autowired
     private BbsReplyAuthRecordService replyAuthRecordService;
+    @Autowired
+    private BbsReplyAuthRecordDao authRecordDao;
+    @Autowired
+    private BbsArticleDao articleDao;
 
-	@Override
+    @Override
     public BbsReplyVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
-     @Override
-    public IPage<BbsReplyVo> selectPage(IPage<BbsReplyVo> page, BbsReplySearch query){
+
+    @Override
+    public IPage<BbsReplyVo> selectPage(IPage<BbsReplyVo> page, BbsReplySearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
@@ -55,10 +64,10 @@ public class BbsReplyServiceImpl extends ServiceImpl<BbsReplyDao, BbsReply> impl
     public boolean audit(ReplyAuditDto auditDto) {
         BbsReply bbsReply = this.getById(auditDto.getReplyId());
         if (bbsReply == null) {
-            throw  new BizException("未找到当前评论信息");
+            throw new BizException("未找到当前评论信息");
         }
-        if(!ArticleEnum.DOING.getCode().equals(bbsReply.getStatus().getCode())) {
-            throw  new BizException("评论已经审核");
+        if (!ArticleEnum.DOING.getCode().equals(bbsReply.getStatus().getCode())) {
+            throw new BizException("评论已经审核");
         }
         bbsReply.setStatus(auditDto.getStatus());
         this.updateById(bbsReply);
@@ -66,4 +75,30 @@ public class BbsReplyServiceImpl extends ServiceImpl<BbsReplyDao, BbsReply> impl
         return true;
     }
 
+    /**
+     * @Description: 评论文章
+     * @Author: cy
+     * @Date: 2022/6/14
+     */
+    @Override
+    public void replyArticle(BbsReply reply) {
+        BbsArticle article = articleDao.selectById(reply.getArticleId());
+        if (article == null) {
+            throw new BizException("评论的文章不存在");
+        }
+
+        String paramValue = baseMapper.selectConfig("bbs_reply_audit");
+        if (paramValue != null && paramValue.equals(YesOrNoEnum.YES.getCode().toString())) {//需审核
+            reply.setStatus(ArticleEnum.DOING);
+            baseMapper.insert(reply);
+
+            BbsReplyAuthRecord authRecord = new BbsReplyAuthRecord();
+            authRecord.setReplyId(reply.getId());
+            authRecord.setAuditState(ArticleEnum.DOING);
+            authRecordDao.insert(authRecord);
+        } else {//不用审核
+            reply.setStatus(ArticleEnum.PASS);
+            baseMapper.insert(reply);
+        }
+    }
 }

+ 25 - 7
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsArticleVo.java

@@ -12,13 +12,31 @@ import org.apache.commons.beanutils.BeanUtils;
 public class BbsArticleVo extends BbsArticle{
 	private static final long serialVersionUID = 1L;
     
-    public BbsArticleVo buildVo(BbsArticle bbsArticle){
-        try {
-            BeanUtils.copyProperties(this,bbsArticle);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return this;
+    private String userName;
+    private String realName;
+    private String avatar;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
     }
 
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
 }

+ 35 - 7
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsReplyVo.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.beanutils.BeanUtils;
 
+import java.util.List;
+
 /**
  * @Author: liweifan
  * @Data: 2022-06-09 17:27:11
@@ -15,15 +17,41 @@ public class BbsReplyVo extends BbsReply {
 
     @ApiModelProperty("话题标题")
     private String articleTitle;
+    private String userName;
+    private String realName;
+    private String avatar;
+    private List<BbsReplyVo> children;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
 
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public List<BbsReplyVo> getChildren() {
+        return children;
+    }
 
-    public BbsReplyVo buildVo(BbsReply bbsReply) {
-        try {
-            BeanUtils.copyProperties(this, bbsReply);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return this;
+    public void setChildren(List<BbsReplyVo> children) {
+        this.children = children;
     }
 
     public String getArticleTitle() {

+ 46 - 0
cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml

@@ -85,4 +85,50 @@
 
         t.created_time_ desc
 	</select>
+    <select id="articleInfo" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
+        SELECT
+            t.id_ as id
+             , t.user_id_ as userId
+             , u.username_ as userName
+             , u.real_name_ as realName
+             , u.avatar_ as avatar
+             , t.title_ as title
+             , t.content_ as content
+             , t.label_id_ as labelId
+             , b.label_name_ as labelName
+             , t.views_count_ as viewsCount
+             , t.likes_count_ as likesCount
+             , t.comments_count_ as commentsCount
+             , t.collects_count_ as collectsCount
+             , t.status_ as status
+             , t.top_flag_ as topFlag
+             , t.reply_flag_ as replyFlag
+             , t.examine_time_ as examineTime
+             , t.created_time_ as createdTime
+             , t.updated_time_ as updatedTime
+             , t.del_flag_ as delFlag
+        FROM bbs_article t
+        LEFT JOIN bbs_config_label b ON t.label_id_ = b.id_
+        LEFT JOIN sys_user u ON t.user_id_ = u.id_
+    </select>
+    <select id="articleReply" resultType="com.yonge.cooleshow.bbs.vo.BbsReplyVo">
+        SELECT
+            r.*,
+            u.username_ AS userName,
+            u.real_name_ AS realName,
+            u.avatar_ AS avatar
+        FROM bbs_reply r
+        LEFT JOIN sys_user u ON r.user_id_=u.id_
+        <where>
+            <if test="param.articleId !=null">
+               AND r.article_id=#{param.articleId}
+            </if>
+            <if test="param.status !=null">
+                AND r.status_=#{param.status}
+            </if>
+            <if test="param.parentId !=null">
+                AND r.parent_id_=#{param.parentId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 3 - 0
cooleshow-bbs/src/main/resources/config/mybatis/BbsReplyMapper.xml

@@ -115,4 +115,7 @@
             </if>
         </where>
     </select>
+    <select id="selectConfig" resultType="java.lang.String" parameterType="java.lang.String">
+        SELECT param_value_ FROM sys_config WHERE param_name_=#{paramName}
+    </select>
 </mapper>

+ 2 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java

@@ -30,8 +30,8 @@ public class HttpResponseResult<T> extends BaseResult<T> {
         return getResponseData(true, HttpStatus.OK, null, "");
     }
 
-    public static <T> HttpResponseResult<T> succeedData(T obj) {
-        return getResponseData(true, HttpStatus.OK, obj, "操作成功");
+    public static <T> HttpResponseResult<T> succeed(String message) {
+        return getResponseData(true, HttpStatus.OK, null, message);
     }
 
     public static <T> HttpResponseResult<T> warned(String message) {

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/SysUserType.java → cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/SysUserType.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.auth.api.enums;
+package com.yonge.cooleshow.common.enums;
 
 import com.yonge.toolset.base.enums.BaseEnum;
 import org.apache.commons.lang3.StringUtils;

+ 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];
-    }
-
-
 }

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

@@ -3,7 +3,7 @@ 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.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.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.req.TeacherMusicSheetAuditReq;

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java

@@ -58,7 +58,7 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param records 课程id集合
 	 * @return
 	 */
-	List<CourseHomeworkVo> selectStudentInfo(@Param("records") List<CourseHomeworkVo> records);
+	List<CourseHomeworkVo> selectStudentInfo(@Param("records") List<Long> records);
 
 	/**
 	 * 查询课程组声部信息 和老师信息
@@ -74,7 +74,7 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param records 课程组id集合
 	 * @return
 	 */
-	List<CourseHomeworkVo> selectSubjectAndGroupInfoList(@Param("records") List<CourseHomeworkVo> records);
+	List<CourseHomeworkVo> selectSubjectAndGroupInfoList(@Param("records") List<Long> records);
 
 	/**
 	 * 查询课程老师信息和学生旷课信息
@@ -82,7 +82,7 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param records 课程id集合
 	 * @return
 	 */
-	List<CourseHomeworkVo> selectTeacherInfo(@Param("records") List<CourseHomeworkVo> records);
+	List<CourseHomeworkVo> selectTeacherInfo(@Param("records") List<Long> records);
 
 	/**
 	 * 管理平台查询
@@ -117,6 +117,6 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @param studentId
 	 * @return
 	 */
-	List<CourseHomeworkVo> selectAbsenteeism(@Param("practiceRecord") List<CourseHomeworkVo> practiceRecord,
+	List<CourseHomeworkVo> selectAbsenteeism(@Param("practiceRecord") List<Long> practiceRecord,
 											 @Param("studentId") Long studentId);
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java

@@ -66,6 +66,18 @@ public class ImGroup implements Serializable {
     @ApiModelProperty(value = "修改时间;")
     private Date updateTime;
 
+    @TableField("course_group_id_")
+    @ApiModelProperty(value = "课程组id")
+    private Long courseGroupId;
+
+    public Long getCourseGroupId() {
+        return courseGroupId;
+    }
+
+    public void setCourseGroupId(Long courseGroupId) {
+        this.courseGroupId = courseGroupId;
+    }
+
     public Boolean getAutoPassFlag() {
         return autoPassFlag;
     }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java

@@ -60,5 +60,13 @@ public interface ImGroupService extends IService<ImGroup> {
     * @date 2022/4/27 10:56
     */
     List<ImGroupResultDto> queryTeacherFun(ImGroupSearchDto imGroupSearchDto);
+
+    /**
+     * 获取课程组的群聊
+     *
+     * @param courseGroupId 课程组id
+     * @return
+     */
+    ImGroup getByCourseGroupId(Long courseGroupId);
 }
 

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

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.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.req.OrderReq;

+ 26 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -14,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
@@ -57,6 +58,9 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
+    private ImGroupService imGroupService;
+
+    @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 
 	@Override
@@ -72,16 +76,21 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         if (CollectionUtils.isEmpty(records)) {
             return courseHomeworkVoIPage;
         }
-        List<CourseHomeworkVo> practiceRecord = records.stream()
-                            .filter(courseHomeworkVo -> courseHomeworkVo.getType().getCode().equals(CourseScheduleEnum.PRACTICE.getCode()))
-                            .collect(Collectors.toList());
+        List<Long> practiceRecordIdList = records.stream()
+                .filter(courseHomeworkVo -> courseHomeworkVo.getType().getCode().equals(CourseScheduleEnum.PRACTICE.getCode()))
+                .map(CourseHomeworkVo::getCourseId)
+                .collect(Collectors.toList());
+
+        List<Long> recordIdList = records.stream()
+                                                 .map(CourseHomeworkVo::getCourseId)
+                                                 .collect(Collectors.toList());
 
         // 学生信息 陪练课展示
-        List<CourseHomeworkVo> studentInfoList = new ArrayList<>();
-        if (CollectionUtils.isEmpty(practiceRecord)) {
+        List<CourseHomeworkVo> studentInfoList;
+        if (CollectionUtils.isEmpty(practiceRecordIdList)) {
             studentInfoList = new ArrayList<>();
         } else{
-            baseMapper.selectStudentInfo(practiceRecord);
+            studentInfoList = baseMapper.selectStudentInfo(practiceRecordIdList);
         }
         if (CollectionUtils.isEmpty(studentInfoList)) {
             studentInfoList = new ArrayList<>();
@@ -90,7 +99,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
                 .collect(Collectors.groupingBy( CourseHomeworkVo::getCourseId));
 
         // 老师信息
-        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(records);
+        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(practiceRecordIdList);
         if (CollectionUtils.isEmpty(teacherInfoList)) {
             teacherInfoList = new ArrayList<>();
         }
@@ -100,7 +109,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         // 旷课状态  学生端展示
         Map<Long, List<CourseHomeworkVo>> absenteeismCollect = new HashMap<>();
         if (query.getStudentId() != null) {
-            List<CourseHomeworkVo> absenteeismList = baseMapper.selectAbsenteeism(records,query.getStudentId());
+            List<CourseHomeworkVo> absenteeismList = baseMapper.selectAbsenteeism(practiceRecordIdList,query.getStudentId());
             if (CollectionUtils.isEmpty(absenteeismList)) {
                 absenteeismList = new ArrayList<>();
             }
@@ -109,12 +118,12 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
 
         // 声部信息
-        List<CourseHomeworkVo> subjectList = baseMapper.selectSubjectAndGroupInfoList(records);
+        List<CourseHomeworkVo> subjectList = baseMapper.selectSubjectAndGroupInfoList(recordIdList);
 
         if (CollectionUtils.isEmpty(subjectList)) {
             subjectList = new ArrayList<>();
         }
-        Map<Long, List<CourseHomeworkVo>>subjectCollect = subjectList.stream()
+        Map<Long, List<CourseHomeworkVo>> subjectCollect = subjectList.stream()
                       .collect(Collectors.groupingBy( CourseHomeworkVo::getCourseId));
 
         for (CourseHomeworkVo record : records) {
@@ -365,12 +374,19 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         if (courseScheduleHomeworkVo == null) {
             return courseScheduleHomeworkVo;
         }
+        // 课程组的群聊
+        ImGroup imGroup = imGroupService.getByCourseGroupId(courseScheduleHomeworkVo.getCourseGroupId());
+        if (imGroup != null) {
+            courseScheduleHomeworkVo.setImGroupId(imGroup.getId());
+        }
 
         // 课程人员作业
         IPage<StudentHomeworkVo> studentHomeworkList = baseMapper
                 .selectStudentHomeworkByCourseId(PageUtil.getPage(query),query.getCourseId());
 
+
         courseScheduleHomeworkVo.setStudentHomeworkList(studentHomeworkList);
+        courseScheduleHomeworkVo.setStudentNum(studentHomeworkList.getTotal());
         return courseScheduleHomeworkVo;
 
     }

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

@@ -1142,10 +1142,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
 
         //课程改为过去式避免校验时报错
-        baseMapper.update(null,Wrappers.<CourseSchedule>lambdaUpdate()
-                .eq(CourseSchedule::getId,adjustVo.getCourseId())
-                .set(CourseSchedule::getStartTime,DateUtil.getYesterday())
-                .set(CourseSchedule::getEndTime,DateUtil.getYesterday()));
+        baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
+                .eq(CourseSchedule::getId, adjustVo.getCourseId())
+                .set(CourseSchedule::getStartTime, DateUtil.getYesterday())
+                .set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
 
         CourseTimeEntity timeEntity = new CourseTimeEntity();
         timeEntity.setStartTime(startTime);
@@ -1494,7 +1494,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @return
      */
     public List<DateChangeVo> splicingDate(String day, List<DateVo> strDateList, List<DateChangeVo> rList) {
-        if (CollectionUtils.isNotEmpty(strDateList)){
+        if (CollectionUtils.isNotEmpty(strDateList)) {
             for (DateVo vo : strDateList) {
                 if (vo != null) {
                     DateChangeVo dateChange = new DateChangeVo();

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

@@ -5,7 +5,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.EmployeeDto;
 import com.yonge.cooleshow.biz.dal.dto.search.EmployeeSearch;
 import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;

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

@@ -101,6 +101,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroup.setUpdateTime(now);
         String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();
         imGroup.setId(imGroupId);
+        imGroup.setCourseGroupId(courseGroupId);
         this.baseMapper.insert(imGroup);
         //保存老师学员关联的通讯录
         imUserFriendService.saveUserFriend(teacherId, studentIds);
@@ -166,5 +167,16 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroupSearchDto.setUserId(sysUserService.getUserId());
         return baseMapper.queryTeacherFun(imGroupSearchDto);
     }
+
+    @Override
+    public ImGroup getByCourseGroupId(Long courseGroupId) {
+
+        return this.lambdaQuery()
+                .eq(ImGroup::getCourseGroupId,courseGroupId)
+                .last("limit 1")
+                .one();
+
+
+    }
 }
 

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

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;

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

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 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.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleHomeworkVo.java

@@ -36,6 +36,9 @@ public class CourseScheduleHomeworkVo {
     private Integer classNum;
 
 
+    @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成 CANCEL已取消")
+    private CourseScheduleEnum courseStatus;
+
     @ApiModelProperty("上课日期")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
@@ -72,10 +75,40 @@ public class CourseScheduleHomeworkVo {
     @ApiModelProperty("课程背景图")
     private String backgroundPic;
 
+    @ApiModelProperty("学员人数")
+    private Long studentNum;
+
+    @ApiModelProperty("群聊id")
+    private String imGroupId;
+
     @ApiModelProperty("学生课后作业列表")
     private IPage<StudentHomeworkVo> studentHomeworkList;
 
 
+    public String getImGroupId() {
+        return imGroupId;
+    }
+
+    public void setImGroupId(String imGroupId) {
+        this.imGroupId = imGroupId;
+    }
+
+    public Long getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Long studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public CourseScheduleEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseScheduleEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
     public Long getCourseId() {
         return courseId;
     }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseScheduleRecordVo.java

@@ -42,6 +42,17 @@ public class CourseScheduleRecordVo implements Serializable {
     @ApiModelProperty(value = "单课时长")
     private Integer singleCourseTime;
 
+    @ApiModelProperty(value = "通讯组id")
+    private String imGroupId;
+
+    public String getImGroupId() {
+        return imGroupId;
+    }
+
+    public void setImGroupId(String imGroupId) {
+        this.imGroupId = imGroupId;
+    }
+
     public Integer getSingleCourseTime() {
         return singleCourseTime;
     }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeworkVo.java

@@ -25,6 +25,17 @@ public class StudentHomeworkVo {
     @ApiModelProperty("学生提交作业 0:未提交,1:已提交")
     private YesOrNoEnum submitHomework;
 
+    @ApiModelProperty("声部 多个逗号隔开")
+    private String subjectName;
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
     public Long getStudentId() {
         return studentId;
     }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeStatisticalVo.java

@@ -33,6 +33,17 @@ public class TeacherHomeStatisticalVo {
     @ApiModelProperty("我的收入")
     private BigDecimal decimal;
 
+    @ApiModelProperty("琴房剩余时长")
+    private Integer pianoTime;
+
+    public Integer getPianoTime() {
+        return pianoTime;
+    }
+
+    public void setPianoTime(Integer pianoTime) {
+        this.pianoTime = pianoTime;
+    }
+
     public Integer getCourseSchedule() {
         return courseSchedule;
     }

+ 9 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -236,7 +236,7 @@
             <if test="records != null and records.size() != 0">
                 and cs.id_ in
                 <foreach collection="records" separator="," close=")" open="(" item="item" >
-                    #{item.courseId}
+                    #{item}
                 </foreach>
             </if>
         </where>
@@ -256,7 +256,7 @@
             <if test="records != null and records.size() != 0">
                 and cs.id_ in
                 <foreach collection="records" separator="," close=")" open="(" item="item" >
-                    #{item.courseId}
+                    #{item}
                 </foreach>
             </if>
         </where>
@@ -274,7 +274,7 @@
             <if test="records != null and records.size() != 0">
                 and cs.id_ in
                 <foreach collection="records" separator="," close=")" open="(" item="item" >
-                    #{item.courseId}
+                    #{item}
                 </foreach>
             </if>
         </where>
@@ -296,6 +296,7 @@
             ch.attachments_ as attachments,
         if(ch.id_ is null,0,1) as decorateHomework,
         ch.create_time_ as decorateTime,
+        cs.status_ as courseStatus,
         cg.background_pic_ as backgroundPic
         from course_schedule  cs
         left join course_group cg on cs.course_group_id_ = cg.id_
@@ -310,10 +311,13 @@
         s.id_ as studentId,
         s.username_ as studentName,
         s.phone_ as studentAvatar,
-        if(sch.id_ is not null,1,0) as submitHomework
+        if(sch.id_ is not null,1,0) as submitHomework,
+        (select group_concat(s2.name_) from subject s2
+        where find_in_set(s2.id_,st.subject_id_) and s2.del_flag_ = 0 ) as subjectName
 
         from course_schedule_student_payment cssp
         left join sys_user s on cssp.user_id_ = s.id_
+        left  join student st on st.user_id_ = s.id_
         left join student_course_homework sch on cssp.user_id_ = sch.student_id_ and sch.course_schedule_id_ = cssp.course_id_
         <where>
             <if test="courseId != null">
@@ -333,7 +337,7 @@
             <if test="practiceRecord != null and practiceRecord.size() != 0">
                 and cs.id_ in
                 <foreach collection="practiceRecord" separator="," close=")" open="(" item="item" >
-                    #{item.courseId}
+                    #{item}
                 </foreach>
             </if>
         </where>

+ 3 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml

@@ -79,11 +79,13 @@
         s.start_time_ AS startTime,
         s.end_time_ AS endTime,
         s.single_course_time_ AS singleCourseTime,
-        a.count_ AS studentCount
+        a.count_ AS studentCount,
+        i.id_ AS imGroupId
         FROM course_schedule s
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_ = sb.id_
         LEFT JOIN (SELECT course_id_,COUNT(1) AS count_ FROM course_schedule_student_payment WHERE course_type_='PIANO_ROOM_CLASS' GROUP BY course_id_) a ON s.id_=a.course_id_
+        LEFT JOIN im_group i ON g.id_=i.course_group_id_
         <where>
             <if test="param.type != null and param.type !=''">
                 AND s.type_ = #{param.type}

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

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 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.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;

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

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.teacher.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.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.*;

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

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.teacher.controller;
 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.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
 import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;

+ 6 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherHomeController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.biz.dal.vo.CountVo;
+import com.yonge.cooleshow.biz.dal.vo.PianoRoomTimeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeStatisticalVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -66,6 +67,10 @@ public class TeacherHomeController extends BaseController {
         // 我的收入
         BigDecimal decimal = userAccountRecordService.getMonthDecimal(sysUser.getId());
 
+
+        // 琴房剩余时长
+        PianoRoomTimeVo pianoRoomTimeVo = courseScheduleService.selectRemainTime(sysUser.getId());
+
         TeacherHomeStatisticalVo teacherHomeStatisticalVo = new TeacherHomeStatisticalVo();
         teacherHomeStatisticalVo.setCourseHomework(courseHomework);
         teacherHomeStatisticalVo.setCourseScheduleReplied(courseScheduleReplied);
@@ -73,6 +78,7 @@ public class TeacherHomeController extends BaseController {
         teacherHomeStatisticalVo.setDecimal(decimal);
         teacherHomeStatisticalVo.setMusicSheet(musicSheet);
         teacherHomeStatisticalVo.setStudentReplied(studentReplied);
+        teacherHomeStatisticalVo.setPianoTime(pianoRoomTimeVo.getRemainTime());
         return succeed(teacherHomeStatisticalVo);
     }
 

+ 12 - 5
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicAlbumController.java

@@ -3,14 +3,10 @@ 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.search.MusicAlbumDetailSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -22,7 +18,7 @@ import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import java.util.Base64;
 
 /**
  * 专辑表 web 控制层
@@ -71,4 +67,15 @@ public class MusicAlbumController extends BaseController {
         IPage<MusicAlbumVo> albumVoIPage = musicAlbumService.favoriteAlbum(PageUtil.getPage(query), search);
         return succeed(PageUtil.pageInfo(albumVoIPage));
     }
+
+
+
+    public static void main(String[] args) {
+
+        String base64ClientCredentials = Base64.getEncoder().encodeToString((1 + ":" + 123123).getBytes());
+
+        System.out.println(base64ClientCredentials);
+        byte[] decode = Base64.getDecoder().decode(base64ClientCredentials.getBytes());
+        System.out.println(new String(decode));
+    }
 }

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

@@ -4,26 +4,19 @@ 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.MusicSheetDto;
-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.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.AlbumAndSheetVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetWebsiteDetailVo;
 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 io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 88 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/SmsCodeController.java

@@ -0,0 +1,88 @@
+package com.yonge.cooleshow.website.controller;
+
+import com.wf.captcha.SpecCaptcha;
+import com.wf.captcha.utils.CaptchaUtil;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.security.SecurityConstants;
+import com.yonge.toolset.base.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("code")
+@Api(tags = "验证码服务")
+public class SmsCodeController extends BaseController {
+
+    @Autowired
+    private SmsCodeService smsCodeService;
+    @Autowired
+    private RedisTemplate<String,String> redisTemplate;
+
+    @ApiOperation(value = "发送登录短信验证码")
+    @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
+                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+    @PostMapping(value = "/sendSmsCode")
+    public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
+        smsCodeService.sendValidCode(mobile, type, ClientEnum.STUDENT);
+        return succeed();
+    }
+
+    @ApiOperation(value = "校验短信验证码")
+    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+                         @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
+                         @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+    @PostMapping(value = "/verifySmsCode")
+    public Object verifySmsCode(String phone,String code,String type) {
+        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
+            return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
+        }
+        if(smsCodeService.verifyValidCode(phone, code, type)){
+            return succeed();
+        }
+        return failed("验证码校验失败");
+    }
+
+    @PostMapping(value = "/verifyImageCode")
+    @ApiOperation("校验登录图形验证码")
+    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String") })
+    public Object verifyImageCode(String phone,String code){
+        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
+            return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
+        }
+        String redisKey = MessageTypeEnum.KAPTCHA_SESSION_KEY + phone;
+        if(redisTemplate.hasKey(redisKey)){
+            if(StringUtils.equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey),code)){
+                return succeed();
+            }
+        }
+        return failed(SecurityConstants.VERIFY_FAILURE);
+    }
+
+    @RequestMapping("/getImageCode")
+    @ApiOperation("获取登录图片验证码")
+    @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")
+    public void getLoginImage(HttpServletRequest request, HttpServletResponse response,String phone) throws Exception {
+        if(StringUtils.isEmpty(phone)){
+            throw new BizException("请输入手机号");
+        }
+        SpecCaptcha specCaptcha = new SpecCaptcha(125, 45, 4);
+        redisTemplate.opsForValue().set(MessageTypeEnum.KAPTCHA_SESSION_KEY + phone,specCaptcha.text(),3, TimeUnit.MINUTES);
+        CaptchaUtil.out(specCaptcha, request, response);
+    }
+}

+ 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));
+    }
+}

+ 58 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/WebSiteController.java

@@ -0,0 +1,58 @@
+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.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/website")
+@Api(value = "官网", tags = "官网")
+public class WebSiteController extends BaseController {
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "切换用户类型")
+    @GetMapping("/cutUserType")
+    public HttpResponseResult<String> cutUserType(
+            @ApiParam(value = "userType", required = true) @RequestParam("userType") String userType) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(user.getUserType().contains(userType)){
+            return HttpResponseResult.succeed(userType);
+        }else{
+            return HttpResponseResult.failed("没有该用户类型");
+        }
+    }
+
+    @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());
+    }
+}

+ 4 - 4
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicAlbumController.java

@@ -5,7 +5,6 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -14,12 +13,13 @@ 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.base.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 

+ 0 - 8
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicSheetController.java

@@ -3,13 +3,9 @@ package com.yonge.cooleshow.website.controller.open;
 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.MusicSheetDto;
 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.ChargeTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
@@ -21,16 +17,12 @@ import com.yonge.cooleshow.biz.dal.vo.MusicSheetWebsiteDetailVo;
 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 io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-import java.util.Date;
-
 /**
  * 曲谱表 web 控制层
  * @author yzp