Explorar o código

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

zouxuan hai 1 ano
pai
achega
23b720746d
Modificáronse 32 ficheiros con 411 adicións e 138 borrados
  1. 6 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  2. 5 0
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java
  3. 22 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java
  4. 11 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  5. 10 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  6. 20 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  7. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java
  8. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  9. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  10. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  11. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java
  12. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java
  13. 7 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  14. 9 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  15. 83 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  16. 55 51
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  17. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  18. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  19. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  20. 7 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantApplyRecordServiceImpl.java
  21. 8 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  22. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  23. 20 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  24. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java
  25. 14 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  26. 12 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  27. 13 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  28. 23 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  29. 6 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java
  30. 1 19
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  31. 16 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java
  32. 4 0
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/provider/LinkfaceRealnameAuthenticationPlugin.java

+ 6 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -66,6 +66,12 @@ public interface SysUserFeignService {
 	@ApiOperation(value = "退出登录")
 	HttpResponseResult<String> logout(@PathVariable("clientId") String clientId, @PathVariable("phone") String phone);
 
+	@PostMapping(value = "exit/{clientId}/{phone}/{openId}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@ApiOperation(value = "指定机构用户退出登录")
+	HttpResponseResult<String> exitByPhoneAndOpenId(@PathVariable("clientId") String clientId,
+														   @PathVariable("phone") String phone,
+														   @PathVariable("openId") String openId);
+
 	@PostMapping(value = "user/list")
 	HttpResponseResult<List<SysUser>> page(@RequestBody SysUserQueryInfo queryInfo);
 

+ 5 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -83,6 +83,11 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 	}
 
 	@Override
+	public HttpResponseResult<String> exitByPhoneAndOpenId(String clientId, String phone, String openId) {
+		return null;
+	}
+
+	@Override
 	public HttpResponseResult<List<SysUser>> page(SysUserQueryInfo queryInfo) {
 		return HttpResponseResult.failed("请求失败");
 	}

+ 22 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/service/CustomTokenServices.java

@@ -30,6 +30,7 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
+import java.text.MessageFormat;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Set;
@@ -294,6 +295,27 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 		return true;
 	}
 
+
+    public boolean revokeTokenByOpenId(String clientId, String phone,String openId) {
+        Collection<OAuth2AccessToken> list = tokenStore.findTokensByClientIdAndUserName(clientId, SecurityConstants.PHONE_PRINCIPAL_PREFIX + phone);
+
+        if (list == null || list.size() == 0) {
+            list = tokenStore.findTokensByClientIdAndUserName(clientId, MessageFormat.format("{0}:{1}:{2}", SecurityConstants.MA_PRINCIPAL_PREFIX, openId, phone));
+        }
+
+        if (list != null) {
+            for (OAuth2AccessToken accessToken : list) {
+                if (accessToken != null) {
+                    if (accessToken.getRefreshToken() != null) {
+                        tokenStore.removeRefreshToken(accessToken.getRefreshToken());
+                    }
+                    tokenStore.removeAccessToken(accessToken);
+                }
+            }
+        }
+        return true;
+    }
+
 	public void revokeTokenByPhone(String phone) {
 		String[] clientIds = new String[] {"system", "student", "teacher","website"};
 		for (String cId : clientIds) {

+ 11 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.auth.web.controller;
 
+import cn.hutool.core.net.URLEncodeUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -187,6 +188,16 @@ public class TokenController extends BaseController {
         return tokenService.revokeToken(clientId, phone) ? succeed("退出成功") : failed();
     }
 
+
+    @PostMapping(value = "exit/{clientId}/{phone}/{openId}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+    @ApiOperation(value = "指定机构用户退出登录")
+    public HttpResponseResult<String> exitByPhoneAndOpenId(@PathVariable("clientId") String clientId,
+                                                           @PathVariable("phone") String phone,@PathVariable("openId") String openId) {
+
+        return tokenService.revokeTokenByOpenId(clientId, phone,openId) ? succeed("退出成功") : failed();
+    }
+
+
     @GetMapping(value = "/checkToken", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
     @ApiOperation(value = "检查token")
     public HttpResponseResult<Object> checkToken(HttpServletRequest request) throws IOException {

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

@@ -233,4 +233,14 @@ public class StudentController extends BaseController {
         studentService.save(student);
         return succeed();
     }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "修改", notes = "传入Student")
+    public HttpResponseResult<Boolean> update(@Validated @RequestBody StudentWrapper.Student student) {
+        if (student.getId() == null) {
+            throw new BizException("id 不能为空");
+        }
+        studentService.save(student);
+        return succeed();
+    }
 }

+ 20 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Sets;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.admin.io.request.TenantAlbumVo;
 import com.yonge.cooleshow.api.feign.dto.TenantWrapper;
@@ -191,6 +192,15 @@ public class TenantAlbumController {
             throw new BizException("当前机构已有专辑");
         }
 
+        // 检查曲目重复
+        if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
+            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList().stream().map(m -> m.getId())).collect(Collectors.toList());
+            Set<Long> musicSet = new HashSet<>(musicIds);
+            if (musicSet.size() < musicIds.size()) {
+                throw new BizException("不能添加相同的曲目");
+            }
+        }
+
         TenantAlbum tenantAlbum = JSON.parseObject(album.jsonString(), TenantAlbum.class);
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 
@@ -230,6 +240,16 @@ public class TenantAlbumController {
             });
         }
 
+        // 检查曲目重复
+        if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
+            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList()
+                    .stream().map(TenantAlbumVo.MusicObject::getId)).collect(Collectors.toList());
+            Set<Long> musicSet = new HashSet<>(musicIds);
+            if (musicSet.size() < musicIds.size()) {
+                throw new BizException("不能添加相同的曲目");
+            }
+        }
+
         TenantAlbum tenantAlbum = JSON.parseObject(album.jsonString(), TenantAlbum.class);
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 

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

@@ -18,7 +18,10 @@ public interface ImUserFriendDao extends BaseMapper<ImUserFriend> {
 
     ImUserFriend findByUserIdAndFriendId(@Param("userId") Long userId, @Param("friendId") Long friendId);
 
-    void delFriendByTenantId(@Param("tenantId") Long tenantId,@Param("userId") Long userId ,
+    void delTeacherFriendByTenantId(@Param("tenantId") Long tenantId,@Param("userId") Long userId ,
                              @Param("clientType") String clientType);
+
+    void delStudentFriendByTenantId(@Param("tenantId") Long tenantId,@Param("userId") Long userId ,
+                                    @Param("clientType") String clientType);
 }
 

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

@@ -68,6 +68,8 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
      */
     List<ImUserWrapper.ImUserFriend> findUserAllImFriendInfo(ClientEnum clientType, Long userId, Map<String, Object> paramMap);
 
-    void delFriendByTenantId(Long tenantId, Long userId, String clientType);
+    void delTeacherFriendByTenantId(Long tenantId, Long userId, String clientType);
+
+    void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType);
 }
 

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

@@ -390,4 +390,10 @@ public interface MusicSheetService extends IService<MusicSheet> {
     Map<Long,MusicSheet> getMapByIds(List<Long> bizIds);
 
     MusicCompareWrapper.SearchData search(MusicCompareWrapper.MusicSearch queryInfo);
+
+    /**
+     * 机构曲目搜索
+     *
+     */
+    MusicCompareWrapper.SearchData searchTenant(MusicCompareWrapper.MusicSearch queryInfo);
 }

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

@@ -130,5 +130,4 @@ public interface StudentService extends IService<Student> {
      */
     void updateTenant(Student student, Long toTenantId);
 
-    void addStudent(StudentWrapper.Student student);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java

@@ -72,6 +72,13 @@ public interface TenantAlbumService extends IService<TenantAlbum>  {
 
     void buyCancel(UserOrderDetailVo userOrderDetailVo);
 
+    /**
+     * 根据机构Id获取专辑
+     *
+     * @param tenantId 机构Id
+     */
+    List<TenantAlbum> getByTenantId(Long tenantId,Boolean status);
+
 
     /**
      * 添加机构专辑数据

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java

@@ -54,6 +54,15 @@ public interface UserTenantAlbumRecordService extends IService<UserTenantAlbumRe
     UserTenantAlbumRecord getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType);
 
     /**
+     * 获取最新的购买记录
+     *
+     * @param tenantId   机构ID
+     * @param userId     用户ID
+     * @param clientType 客户端类型
+     */
+    List<UserTenantAlbumRecord> getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType, List<Long> tenantAlbumIds);
+
+    /**
      * 获取生效中的专辑ID
      *
      * @param userId

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

@@ -471,8 +471,13 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
      * @param clientType 用户类型,处理同账号多角色问题
      */
     @Override
-    public void delFriendByTenantId(Long tenantId, Long userId, String clientType) {
-        this.baseMapper.delFriendByTenantId(tenantId, userId, clientType);
+    public void delTeacherFriendByTenantId(Long tenantId, Long userId, String clientType) {
+        this.baseMapper.delTeacherFriendByTenantId(tenantId, userId, clientType);
+    }
+
+    @Override
+    public void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType) {
+        this.baseMapper.delStudentFriendByTenantId(tenantId, userId, clientType);
     }
 }
 

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

@@ -1633,8 +1633,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             imUserState.setRoomUid(callbackOnMemberStateChange.getGroupId());
             imUserStates.add(imUserState);
         }
-        opsRoom(imUserStates);
         imLiveBroadcastRoomMemberMapper.updateOnlineStatus(userIds, callbackOnMemberStateChange.getGroupId(),onlineStatus);
+        CompletableFuture.runAsync(() -> {
+            opsRoom(imUserStates);
+        });
     }
 
     @Override
@@ -1664,8 +1666,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             imUserState.setRoomUid(callbackAfterMemberExit.getGroupId());
             imUserStates.add(imUserState);
         }
-        opsRoom(imUserStates);
         imLiveBroadcastRoomMemberMapper.updateLiveRoomStatus(userIds, callbackAfterMemberExit.getGroupId(),liveRoomStatus);
+        CompletableFuture.runAsync(() -> {
+            opsRoom(imUserStates);
+        });
     }
 
     @Override
@@ -1707,8 +1711,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             imUserState.setRoomUid(callbackAfterNewMemberJoin.getGroupId());
             imUserStates.add(imUserState);
         }
-        opsRoom(imUserStates);
         imLiveBroadcastRoomMemberMapper.updateLiveRoomStatus(userIds, callbackAfterNewMemberJoin.getGroupId(),liveRoomStatus);
+        CompletableFuture.runAsync(() -> {
+            opsRoom(imUserStates);
+        });
     }
 
     // 定时任务凌晨2点,关闭腾讯直播间, 融云直播间自动关闭,不做处理

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

@@ -53,34 +53,11 @@ import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.service.AlbumFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
-import com.yonge.cooleshow.biz.dal.service.CourseCoursewareService;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.service.MusicFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetAccompanimentService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetAuthRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetPracticeRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.service.PlatformCashAccountRecordService;
-import com.yonge.cooleshow.biz.dal.service.RedisCacheService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.StudentStarService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.UserAccountService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
@@ -222,6 +199,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Autowired
     private RedisCacheService redisCacheService;
 
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
     public MusicSheetDao getDao() {
         return musicSheetDao;
     }
@@ -1810,7 +1793,6 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         List<MusicCompareWrapper.MusicName> musicNames = new ArrayList<>();
         if (StringUtil.isEmpty(queryInfo.getType()) || queryInfo.getType().equals("MUSIC")) {
 
-            PageUtil.getPage(queryInfo);
             // 查询曲目列表
             List<Long> musicIds = musicSheetDao.searchMusic(PageUtil.getPage(queryInfo),queryInfo);
 
@@ -1894,6 +1876,81 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+    public MusicCompareWrapper.SearchData searchTenant(MusicCompareWrapper.MusicSearch queryInfo) {
+        MusicCompareWrapper.SearchData searchData = new MusicCompareWrapper.SearchData();
+        List<MusicCompareWrapper.MusicName> musicNames = new ArrayList<>();
+        searchData.setMusicNames(musicNames);
+
+        // 查询学生机构
+        Student student = studentService.getById(queryInfo.getUserId());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        if (student.getTenantId() == null || student.getTenantId() == -1) {
+            throw new BizException("学生未绑定机构");
+        }
+        // 查询机构下的专辑
+        List<TenantAlbum> albumList = tenantAlbumService.getByTenantId(student.getTenantId(), true);
+        List<Long> albumIds = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(albumList)) {
+            albumIds = albumList.stream().map(TenantAlbum::getId).distinct().collect(Collectors.toList());
+        }
+
+        List<UserTenantAlbumRecord> recordList = userTenantAlbumRecordService
+                .getNewestByTenantIdAndUserId(student.getTenantId(), queryInfo.getUserId(), ClientEnum.STUDENT, albumIds);
+
+        if (CollectionUtils.isNotEmpty(recordList)) {
+            albumIds = recordList.stream().map(UserTenantAlbumRecord::getTenantAlbumId).distinct().collect(Collectors.toList());
+            queryInfo.setTenantAlbumIds(albumIds);
+        } else {
+            return searchData;
+        }
+
+        // 查询曲目列表
+        List<Long> musicIds = musicSheetDao.searchMusic(PageUtil.getPage(queryInfo),queryInfo);
+        if (CollectionUtils.isNotEmpty(musicIds)) {
+
+
+            MusicSheetSearch musicSheetSearch = new MusicSheetSearch();
+            musicSheetSearch.setMusicSheetIdlist(musicIds);
+            IPage<MusicSheetVo> musicSheetVoIPage = selectPage(PageUtil.getPage(queryInfo), musicSheetSearch);
+            List<MusicSheetVo> records = musicSheetVoIPage.getRecords();
+            if (CollectionUtils.isNotEmpty(records)) {
+                for (MusicSheetVo record : records) {
+                    MusicCompareWrapper.MusicName musicName = new MusicCompareWrapper.MusicName();
+                    musicName.setId(record.getId());
+                    musicName.setName(record.getMusicSheetName());
+                    musicName.setType("MUSIC");
+                    musicName.setHotFlag(record.getHotFlag() != null?record.getHotFlag():YesOrNoEnum.NO);
+                    musicName.setSort(Optional.ofNullable(record.getFavoriteCount()).orElse(0));
+                    musicNames.add(musicName);
+                }
+                searchData.setMusic(PageUtil.pageInfo(musicSheetVoIPage));
+            }
+
+            // 是否关注
+            if (queryInfo.getUserId() != null) {
+                List<MusicFavorite> musicFavoriteList = musicFavoriteService.lambdaQuery()
+                        .eq(MusicFavorite::getUserId, queryInfo.getUserId())
+                        .eq(MusicFavorite::getClientType, ClientEnum.STUDENT)
+                        .in(MusicFavorite::getMusicSheetId, musicIds)
+                        .list();
+                if (CollectionUtils.isNotEmpty(musicFavoriteList)) {
+                    Set<Long> set = musicFavoriteList.stream()
+                            .map(MusicFavorite::getMusicSheetId)
+                            .collect(Collectors.toSet());
+                    for (MusicCompareWrapper.MusicName record : musicNames) {
+                        record.setFavorite(set.contains(record.getId()) ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+                    }
+                }
+            }
+        }
+
+        musicNames.sort(Comparator.comparing(MusicCompareWrapper.MusicName::getSort).reversed());
+        return searchData;
+    }
+
+    @Override
     public Boolean updateMusicImg(MusicImgDto musicImgDto, Long musicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         musicSheet.setMusicImg(musicImgDto.getMusicImg());

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

@@ -22,6 +22,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
@@ -290,6 +292,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         if (null == studentVo) {
             return HttpResponseResult.failed("未找到用户信息");
         }
+        if (studentVo.getTenantId() != null && studentVo.getTenantId() > 0) {
+            throw  new BizException("不可邀请机构学生");
+        }
         TeacherVo detail = teacherDao.detail(userId);
         if (null != detail) {
             //身份证号、手机号脱敏
@@ -527,21 +532,30 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             return;
         }
         if (!tenantId.equals(-1L)) {
+            // 退群
             List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
+                    .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
+                    .eq(ImGroupMember::getIsAdmin, false)
                     .eq(ImGroupMember::getUserId, student.getUserId())
-                    .eq(ImGroupMember::getRoleType, ClientEnum.STUDENT.getCode())
-                    .eq(ImGroupMember::getIsAdmin, false).list();
-            List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).distinct()
-                    .collect(Collectors.toList());
-            for (String groupId : groupIdList) {
-                try {
-                    imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT, true);
-                } catch (Exception e) {
-                    log.error("退出群聊失败", e);
+                    .list();
+            List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
+                    .distinct().collect(Collectors.toList());
+            if (!groupIdList.isEmpty()) {
+                List<String> orgGroupIdList = imGroupService.listByIds(groupIdList).stream()
+                        .filter(next -> ImGroupType.ORG.equals(next.getType())).map(ImGroup::getId)
+                        .collect(Collectors.toList());
+                for (String groupId : orgGroupIdList) {
+                    try {
+                        imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT,true);
+                    } catch (Exception e) {
+                        log.error("学生注册,切换机构退群失败:{}", e.getMessage());
+                        throw new BizException("退群失败");
+                    }
                 }
             }
-            // 删除机构好友关系
-            imUserFriendService.delFriendByTenantId(tenantId, student.getUserId(),ClientEnum.STUDENT.getCode());
+//             删除好友
+            imUserFriendService.delTeacherFriendByTenantId(student.getTenantId(), student.getUserId(),
+                    ClientEnum.STUDENT.getCode());
         }
         if (toTenantId != null && toTenantId != -1L) {
             // 加好友
@@ -559,51 +573,41 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 .update();
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void addStudent(StudentWrapper.Student student) {
-        // 更新头像
-        if (StringUtils.isEmpty(student.getAvatar())) {
-            String avatar = sysConfigService.findConfigValue(SysConfigConstant.STUDENT_AVATAR);
-            student.setAvatar(avatar);
-        }
-        SysUser sysUser = employeeDao.querySysUserByPhone(student.getPhone());
-        if (sysUser == null) {
-            sysUser = new SysUser();
-            sysUser.setUserType(ClientEnum.STUDENT.getCode());
-            sysUser.setGender(student.getGender());
-            //设置默认头像
-            sysUser.setAvatar(student.getAvatar());
-
-            sysUser.setUsername(student.getName());
-            sysUser.setPhone(student.getPhone());
-            //初始密码,手机号后6位
-            String password = "klx" + sysUser.getPhone().substring(sysUser.getPhone().length() - 4);
-            sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
-            //插入
-            employeeDao.insertSysUser(sysUser);
-        } else {
-            if(StringUtils.isNotEmpty(sysUser.getUserType()) && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())){
-                throw new BizException("手机号已经注册学生账号");
-            }
-            if (StringUtil.isEmpty(sysUser.getUserType())) {
-                sysUser.setUserType(ClientEnum.STUDENT.getCode());
-            } else if (!sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
-                sysUser.setUserType(sysUser.getUserType() + "," + ClientEnum.STUDENT.getCode());
-            }
-            sysUser.setGender(student.getGender());
-            employeeDao.updateSysUser(sysUser);
-        }
-
-        student.setId(sysUser.getId());
-        this.save(student);
-    }
-
     private Boolean updateStudent(StudentWrapper.Student studentInfo) {
         StudentVo student = detail(studentInfo.getId());
         if (student == null) {
             throw new BizException("学生信息不存在");
         }
+        // 是否有修改机构
+        Long newTenantId = studentInfo.getTenantId();
+        if(newTenantId != null && !newTenantId.equals(student.getTenantId()) && student.getTenantId() != -1L){
+            // 退群
+            List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
+                    .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
+                    .eq(ImGroupMember::getIsAdmin, false)
+                    .eq(ImGroupMember::getUserId, student.getUserId())
+                    .list();
+            List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
+                    .distinct().collect(Collectors.toList());
+            if (!groupIdList.isEmpty()) {
+                List<String> orgGroupIdList = imGroupService.listByIds(groupIdList).stream()
+                        .filter(next -> ImGroupType.ORG.equals(next.getType())).map(ImGroup::getId)
+                        .collect(Collectors.toList());
+                for (String groupId : orgGroupIdList) {
+                    try {
+                        imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT,true);
+                    } catch (Exception e) {
+                        log.error("学生注册,切换机构退群失败:{}", e.getMessage());
+                        throw new BizException("退群失败");
+                    }
+                }
+            }
+//             删除好友
+            imUserFriendService.delTeacherFriendByTenantId(student.getTenantId(), student.getUserId(),
+                    ClientEnum.STUDENT.getCode());
+        }
+
+
         // 手机号码修改
         if (!student.getPhone().equals(studentInfo.getPhone())) {
             com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = getOrCreateAccount(studentInfo);

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

@@ -1060,7 +1060,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 }
             });
             // 删除好友关系
-            imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId(),ClientEnum.TEACHER.getCode());
+            imUserFriendService.delStudentFriendByTenantId(teacher.getTenantId(), teacher.getUserId(),ClientEnum.TEACHER.getCode());
 
         }
 

+ 7 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java

@@ -388,21 +388,21 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     public HttpResponseResult<Object> importActiveCode(List<ExcelDataReaderProperty<TenantActivationCodeWrapper.ImportTemplate>> dataList,
                                                            Long tenantId, Long userId, Long tenantAlbumPurchaseId) {
         if (dataList.isEmpty()) {
-            throw new BizException("未解析到数据");
+            return HttpResponseResult.failed(500, null, "未解析到数据");
         }
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
 
         List<TenantActivationCodeWrapper.ImportTemplate> importTemplates = dataList.stream().map(ExcelDataReaderProperty::getClazz).collect(Collectors.toList());
         List<String> codeList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getCode).
                 filter(StringUtils::isNotEmpty).collect(Collectors.toList());
-        if(codeList.isEmpty()){
-            throw new BizException("未指定激活码");
+        if (codeList.isEmpty()) {
+            return HttpResponseResult.failed(500, null, "未指定激活码");
         }
 
         List<String> phoneList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getPhone)
                         .filter(StringUtils::isNotEmpty).collect(Collectors.toList());
-        if(phoneList.isEmpty()){
-            throw new BizException("未指定手机号");
+        if (phoneList.isEmpty()) {
+            return HttpResponseResult.failed(500, null, "未指定手机号");
         }
 
         List<TenantActivationCode> activationCodes = this.lambdaQuery()
@@ -450,6 +450,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
                     lines.add(repeatLine);
                 }
                 lines.add(msgRowNo);
+                code_repeat_lines.put(code, lines);
             } else {
                 codeRowMap.put(acCode, msgRowNo);
             }
@@ -532,7 +533,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
                     return tenantActivationCode;
                 }).collect(Collectors.toList());
         if (tenantActivationCodes.isEmpty()) {
-            throw new BizException("没有合法的导入数据");
+            return HttpResponseResult.failed(500, null, "没有合法的导入数据");
         }
         this.updateBatchById(tenantActivationCodes, 50);
         return HttpResponseResult.succeed();

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

@@ -476,6 +476,23 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         tenantAlbumPurchaseService.updateById(tenantAlbumPurchase);
     }
 
+    @Override
+    public List<TenantAlbum> getByTenantId(Long tenantId,Boolean status) {
+        if (tenantId == null) {
+            return new ArrayList<>();
+        }
+        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery().eq(TenantAlbumRef::getTenantId, tenantId).list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        Set<Long> tenantAlbumId = list.stream().map(TenantAlbumRef::getTenantAlbumId).collect(Collectors.toSet());
+        return this.lambdaQuery().in(TenantAlbum::getId, tenantAlbumId)
+                .eq(status != null, TenantAlbum::getStatus, status)
+                .eq(TenantAlbum::getDelFlag,false).list();
+
+
+    }
+
     private void insertAlbumMusic(Long tenantId, TenantAlbum tenantAlbum,
                                   List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {
         //曲目表赋值

+ 7 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantApplyRecordServiceImpl.java

@@ -128,13 +128,13 @@ public class TenantApplyRecordServiceImpl extends ServiceImpl<TenantApplyRecordM
         if (tenantStaff != null) {
             throw new BizException("该手机号已经有机构账号");
         }
-
-        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
-        sysUserQueryWrapper.lambda().eq(SysUser::getPhone, tenantApply.getPhone());
-        List<SysUser> sysUsers = sysUserMapper.selectList(sysUserQueryWrapper);
-        if (!sysUsers.isEmpty() && sysUsers.stream().anyMatch(next -> next.getUserType().contains(ClientEnum.SYSTEM.getCode()))) {
-            throw new BizException("该手机号已经有系统员工账户");
-        }
+//
+//        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
+//        sysUserQueryWrapper.lambda().eq(SysUser::getPhone, tenantApply.getPhone());
+//        List<SysUser> sysUsers = sysUserMapper.selectList(sysUserQueryWrapper);
+//        if (!sysUsers.isEmpty() && sysUsers.stream().anyMatch(next -> next.getUserType().contains(ClientEnum.SYSTEM.getCode()))) {
+//            throw new BizException("该手机号已经有系统员工账户");
+//        }
 
         // 查询申请记录 是否存在正在申请中的
         TenantApplyRecord record = this.lambdaQuery()

+ 8 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java

@@ -262,9 +262,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             //获取当前账户的用户类型
             String userType = sysUser.getUserType();
 
-            if (userType.contains(SysUserType.SYSTEM.getCode())){
-                throw new BizException("该手机号已注册平台员工");
-            }
+//            if (userType.contains(SysUserType.SYSTEM.getCode())){
+//                throw new BizException("该手机号已注册平台员工");
+//            }
             //设置默认机构类型
             String tenantUserType = SysUserType.ORGANIZATION.getCode();
             if (StringUtils.isEmpty(userType)) {
@@ -432,7 +432,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         //判断修改手机号后所属
         if (!info.getPhone().equals(oldTenantInfo.getPhone())) {
             // 清除登录token信息
-            sysUserFeignService.logout(ClientEnum.ORGANIZATION.getCode().toLowerCase(), oldTenantInfo.getPhone());
+            TenantStaff tenantStaff = tenantStaffMapper.selectByUserId(sysUser.getId());
+            if(tenantStaff != null){
+                sysUserFeignService.exitByPhoneAndOpenId(ClientEnum.ORGANIZATION.getCode().toLowerCase(),
+                        oldTenantInfo.getPhone(),tenantStaff.getWxOpenid());
+            }
         }
         tenantInfoMapper.update(null, Wrappers.<TenantInfo>lambdaUpdate()
                 .set(TenantInfo::getName, info.getName())

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

@@ -236,7 +236,7 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                         log.error("老师解绑审核成功,解散机构群失败:{}", e.getMessage());
                     }
                 }
-                imUserFriendService.delFriendByTenantId(unbindRecord.getUserId(), unbindRecord.getUserId(),
+                imUserFriendService.delStudentFriendByTenantId(unbindRecord.getUserId(), unbindRecord.getUserId(),
                         ClientEnum.TEACHER.getCode());
             }
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()

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

@@ -20,12 +20,10 @@ import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.obj.ObjectUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
@@ -210,6 +208,7 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         return this.updateById(JSON.parseObject(userTenantAlbumRecord.jsonString(), UserTenantAlbumRecord.class));       
     }
 
+
     /**
      * 获取最新的购买记录
      *
@@ -219,16 +218,32 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
      */
     @Override
     public UserTenantAlbumRecord getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType) {
-        if (tenantId == null || userId == null || clientType == null) {
+        List<UserTenantAlbumRecord> recordList = getNewestByTenantIdAndUserId(tenantId, userId, clientType, null);
+        if (CollectionUtils.isEmpty(recordList)) {
             return null;
         }
+        return recordList.get(0);
+    }
+    /**
+     * 获取最新的购买记录
+     *
+     * @param tenantId   机构ID
+     * @param userId     用户ID
+     * @param clientType 客户端类型
+     */
+    @Override
+    public List<UserTenantAlbumRecord> getNewestByTenantIdAndUserId(Long tenantId, Long userId, ClientEnum clientType, List<Long> tenantAlbumIds) {
+        if (tenantId == null || userId == null || clientType == null) {
+            return new ArrayList<>();
+        }
         return this.lambdaQuery()
                 .eq(UserTenantAlbumRecord::getTenantId, tenantId)
                 .eq(UserTenantAlbumRecord::getUserId, userId)
                 .eq(UserTenantAlbumRecord::getClientType, clientType)
+                .in(CollectionUtils.isNotEmpty(tenantAlbumIds),UserTenantAlbumRecord::getTenantAlbumId,tenantAlbumIds)
+                .ge(UserTenantAlbumRecord::getEndTime, new Date())
                 .orderByDesc(UserTenantAlbumRecord::getEndTime)
-                .last("limit 1")
-                .one();
+                .list();
     }
 
     @Override

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java

@@ -384,6 +384,10 @@ public class MusicCompareWrapper {
         @ApiModelProperty("类型 MUSIC 曲目 ALBUM专辑")
         private String type;
 
+        @ApiModelProperty(value = "机构专辑ID",hidden = true)
+        private List<Long> tenantAlbumIds;
+
+        @ApiModelProperty(hidden = true)
         private Long userId;
     }
 

+ 14 - 7
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -28,14 +28,21 @@
         SELECT <include refid="Base_Column_List"/> FROM im_user_friend WHERE user_id_ = #{userId} AND friend_id_ = #{friendId} LIMIT 1
     </select>
 
-    <delete id="delFriendByTenantId">
+    <delete id="delTeacherFriendByTenantId">
         DELETE t1
         FROM im_user_friend t1
-                 LEFT JOIN teacher t2 ON (
-                    t2.tenant_id_ = #{tenantId} AND
-                    (t1.user_id_ = t2.user_id_ OR t1.friend_id_ = t2.user_id_)
-            )
-        WHERE (t1.user_id_ = #{userId} and t1.client_type_ = #{clientType})
-        OR t1.friend_id_ = #{userId}
+                 LEFT JOIN teacher t2 ON t1.friend_id_ = t2.user_id_
+                 LEFT JOIN teacher t3 ON t1.user_id_ = t3.user_id_
+        WHERE (t1.user_id_ = #{userId} and t1.client_type_ = #{clientType} and t2.tenant_id_ = #{tenantId})
+           OR (t1.friend_id_ = #{userId} and t1.friend_type_ = #{clientType} and t3.tenant_id_ = #{tenantId})
+    </delete>
+
+    <delete id="delStudentFriendByTenantId">
+        DELETE t1
+        FROM im_user_friend t1
+                 LEFT JOIN student t2 ON t1.friend_id_ = t2.user_id_
+                 LEFT JOIN student t3 ON t1.user_id_ = t3.user_id_
+        WHERE (t1.user_id_ = #{userId} and t1.client_type_ = #{clientType} and t2.tenant_id_ = #{tenantId})
+           OR (t1.friend_id_ = #{userId} and t1.friend_type_ = #{clientType} and t3.tenant_id_ = #{tenantId})
     </delete>
 </mapper>

+ 12 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -806,15 +806,25 @@
     </select>
 
     <select id="searchMusic" resultType="java.lang.Long">
-        select id_ from music_sheet  t
+        select t.id_ from music_sheet  t
+        <if test="param.tenantAlbumIds != null and param.tenantAlbumIds.size() != 0">
+            left join tenant_album_music tam on t.id_ = tam.music_sheet_id_
+        </if>
             <where>
-                t.state_=1 and t.audit_version_ = 0 and del_flag_ = 0 and audit_status_ = 'PASS'
+                t.state_=1 and t.audit_version_ = 0 and t.del_flag_ = 0 and t.audit_status_ = 'PASS'
                 <if test="param.subjectId != null">
                     and ( t.music_subject_ = #{param.subjectId} or t.music_subject_ is null or t.music_subject_ = '')
                 </if>
                 <if test="param.name != null and param.name != ''">
                     and t.music_sheet_name_ like concat('%',#{param.name},'%')
                 </if>
+                <if test="param.tenantAlbumIds != null and param.tenantAlbumIds.size() != 0">
+                    and tam.tenant_album_id_ in
+                    <foreach collection="param.tenantAlbumIds" item="item" open="(" close=")" separator=",">
+                        #{item}
+                    </foreach>
+                    and tam.del_flag_=0
+                </if>
             </where>
         order by t.top_flag_ desc, t.sort_number_ desc, t.favorite_count_ desc
 

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

@@ -422,4 +422,17 @@ public class MusicSheetController extends BaseController {
     }
 
 
+    @ApiOperation(value = "搜索机构")
+    @PostMapping(value="/searchTenant")
+    public HttpResponseResult<MusicCompareWrapper.SearchData> searchTenant(@RequestBody MusicCompareWrapper.MusicSearch queryInfo) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        queryInfo.setUserId(sysUser.getId());
+        return succeed(musicSheetService.searchTenant(queryInfo));
+    }
+
+
 }

+ 23 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.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.biz.dal.dto.MusicImgDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysConfig;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
@@ -90,6 +91,28 @@ public class OpenClient extends BaseController {
         return HttpResponseResult.succeed(detail);
     }
 
+
+    @GetMapping("/checkPhone")
+    @ApiOperation(value = "检查手机是否已经是机构学生")
+    public HttpResponseResult<Boolean> checkPhone(String phone) {
+
+
+        // 根据手机号 判断是否已经有机构账户
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(phone);
+        if (sysUser == null) {
+            return HttpResponseResult.succeed(true);
+        }
+        Student student = studentService.getById(sysUser.getId());
+        if (student == null) {
+            return HttpResponseResult.succeed(true);
+        }
+        if (student.getTenantId() ==null || student.getTenantId() == -1) {
+            return HttpResponseResult.succeed(true);
+        } else {
+            return HttpResponseResult.succeed(false);
+        }
+    }
+
     @ApiOperation(value = "绑定老师")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),

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

@@ -109,7 +109,11 @@ public class TeacherController extends BaseController {
     @PostMapping("/submit")
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     public HttpResponseResult<Boolean> submit(@Valid @RequestBody TeacherSubmitReq teacherSubmitReq) {
-        TenantInfo tenantInfo = getTenantInfo();
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        TenantInfo tenantInfo = tenantInfoService.getById(sysUser.getTenantId());
+        if (tenantInfo == null) {
+            throw new BizException("非法请求");
+        }
         if (teacherSubmitReq.getUserId() != null) {
             Teacher teacher = teacherService.lambdaQuery().eq(Teacher::getUserId, teacherSubmitReq.getUserId())
                     .eq(Teacher::getTenantId, tenantInfo.getId()).last("limit 1").one();
@@ -118,6 +122,7 @@ public class TeacherController extends BaseController {
             }
         }
         teacherSubmitReq.setTenantId(tenantInfo.getId());
+        teacherSubmitReq.setUpdateBy(sysUser.getId());
         return teacherService.submit(teacherSubmitReq);
     }
 

+ 1 - 19
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -112,27 +112,9 @@ public class OpenStudentController extends BaseController {
                 }
                 // 转到其他机构
                 if ((!Objects.equals(student.getTenantId(), one.getTenantId()))) {
-                    if(student.getUpdateTenant() == null || Boolean.FALSE.equals(student.getUpdateTenant())){
+                    if (student.getUpdateTenant() == null || Boolean.FALSE.equals(student.getUpdateTenant())) {
                         TenantInfo oldTenant = tenantInfoService.getById(one.getTenantId());
                         throw new BizException(5004, oldTenant.getName());
-                    } else {
-                        // 退群
-                        List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                                .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
-                                .eq(ImGroupMember::getIsAdmin, false)
-                                .eq(ImGroupMember::getUserId, one.getUserId())
-                                .list();
-                        List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
-                                .distinct().collect(Collectors.toList());
-                        groupIdList.forEach(groupId -> {
-                            try {
-                                imGroupService.quit(groupId, one.getUserId(), ClientEnum.STUDENT, true);
-                            } catch (Exception e) {
-                                log.error("学生注册,切换机构退群失败:{}", e.getMessage());
-                            }
-                        });
-                        // 删除好友
-                        imUserFriendService.delFriendByTenantId(tenantId, one.getUserId(),ClientEnum.TEACHER.getCode());
                     }
                 }
 

+ 16 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTenantController.java

@@ -65,6 +65,22 @@ public class OpenTenantController {
     }
 
 
+
+    @GetMapping("/checkPhone")
+    @ApiOperation(value = "检查手机是否已经注册机构账户")
+    public HttpResponseResult<Boolean> checkPhone(String phone) {
+
+
+        // 根据手机号 判断是否已经有机构账户
+        TenantStaff tenantStaff = tenantStaffService.getByPhone(phone);
+        if (tenantStaff != null) {
+            return HttpResponseResult.succeed(true);
+        }
+        return HttpResponseResult.succeed(false);
+    }
+
+
+
     @GetMapping("/bindWechat")
     @ApiOperation(value = "绑定微信")
     public HttpResponseResult<Boolean> bindWechat(@RequestParam("phone") String phone,

+ 4 - 0
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/provider/LinkfaceRealnameAuthenticationPlugin.java

@@ -1,5 +1,9 @@
 package com.yonge.toolset.thirdparty.user.realname.provider;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import com.yonge.toolset.utils.idcard.IdcardValidator;
 import com.alibaba.fastjson.JSONObject;
 import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;