Forráskód Böngészése

Merge branch 'develop'

liujc 1 éve
szülő
commit
48b000e9fc

+ 5 - 5
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -71,6 +71,7 @@ import java.util.List;
 @RequestMapping("${app-config.url.tenant:}/tenantActivationCode")
 @Api(tags = "机构激活码")
 public class TenantActivationCodeController extends BaseController {
+
     @Autowired
     private TenantActivationCodeService tenantActivationCodeService;
 
@@ -294,7 +295,7 @@ public class TenantActivationCodeController extends BaseController {
 
     @PostMapping("/importActiveCode")
     @ApiOperation(value = "导入", notes = "传入file")
-    public HttpResponseResult<List<ErrMsg>> importActiveCode(
+    public HttpResponseResult<Object> importActiveCode(
             @RequestParam("file") MultipartFile file,
             @RequestParam("tenantAlbumPurchaseId") Long tenantAlbumPurchaseId) {
         if (null == file) {
@@ -312,11 +313,10 @@ public class TenantActivationCodeController extends BaseController {
         try {
             ExcelDataReader<TenantActivationCodeWrapper.ImportTemplate> reader =
                     ExcelUtils.getReader(TenantActivationCodeWrapper.ImportTemplate.class, file);
-            tenantActivationCodeService.importActiveCode(reader.getDataList(), user.getTenantId(), user.getId(),
+            return tenantActivationCodeService.importActiveCode(reader.getDataList(), user.getTenantId(), user.getId(),
                     tenantAlbumPurchaseId);
-            return HttpResponseResult.succeed();
-        } catch (ExcelException e) {
-            log.error("导入激活码失败:"+JSON.toJSONString(e.getErrMsgList()));
+        } catch (Exception e) {
+            log.error("导入激活码失败:"+JSON.toJSONString(e.getMessage()));
             return HttpResponseResult.failed("文件解析错误");
         }
     }

+ 36 - 22
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -15,6 +15,8 @@ import com.yonge.toolset.utils.validator.ValidationKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -33,6 +35,9 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+import org.slf4j.Logger;
 
 /**
  * 即时通讯群组(ImGroup)表控制层
@@ -42,6 +47,7 @@ import java.util.List;
  */
 @Api(tags = "即时通讯群组")
 @RestController
+@Slf4j
 @RequestMapping("/imGroup")
 public class ImGroupController extends BaseController {
     /**
@@ -122,32 +128,40 @@ public class ImGroupController extends BaseController {
 
     @ApiOperation("IM导入消息")
     @PostMapping(value = "/ImportIM")
-    public void ImportIM(String groupId) throws Exception {
-        if (StringUtils.isNotBlank(groupId)) {
-            List<ImHistoryMessage> info = imGroupService.getImHistoryMessageByGroupId(groupId);
-            imGroupService.importInfo(info);
-            return;
-        }
-        List<ImHistoryMessage> info;
-        //计算总数据量
-        double count = imGroupService.queryCount();
-        //计算调用次数
-        int num = (int) Math.ceil(count / 100);
-        for (int i = 1; i <=num ; i++) {
-            int page =i;
-            int size =100;
-            //获取融云消息
-            //List<ImGroup> list = imGroupService.lambdaQuery().last("limit "+(page-1)*size+","+size).list();
-            info = imGroupService.getRongYunInfo(page,size);
-            //IM导入
-            imGroupService.importInfo(info);
-        }
+    public void ImportIM() throws Exception {
+
+        CompletableFuture.runAsync(() -> {
+            try {
+                List<ImHistoryMessage> info;
+                //计算总数据量
+                double count = imGroupService.queryCount();
+                //计算调用次数
+                int num = (int) Math.ceil(count / 100);
+                for (int i = 1; i <=num ; i++) {
+                    int page =i;
+                    int size =100;
+                    //获取融云消息
+                    //List<ImGroup> list = imGroupService.lambdaQuery().last("limit "+(page-1)*size+","+size).list();
+                    info = imGroupService.getRongYunInfo(page,size);
+                    //IM导入
+                    imGroupService.importInfo(info);
+                }
+            } catch (Exception e) {
+                log.error("IM导入消息失败", e);
+            }
+        });
     }
 
     @GetMapping(value = "/groupTransfer")
     @ApiOperation("群导入")
-    public void groupTransfer(String groupId) {
-        imGroupService.groupTransfer(groupId);
+    public void groupTransfer() {
+        CompletableFuture.runAsync(() -> {
+            try {
+                imGroupService.groupTransfer();
+            } catch (Exception e) {
+                log.error("群导入失败", e);
+            }
+        });
     }
 
     @GetMapping(value = "/importUser")

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysUserMapper.java

@@ -52,4 +52,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<CustomerService.MessageReceives> selectMessageReceives(@Param("param") CustomerService.NotifyMessage message);
 
     com.yonge.cooleshow.auth.api.entity.SysUser findUserByPhone(@Param("phone") String phone);
+
+    com.yonge.cooleshow.auth.api.entity.SysUser getByUserId(@Param("userId") Long userId);
 }

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

@@ -183,7 +183,7 @@ public interface ImGroupService extends IService<ImGroup> {
     /**
      * 群迁移,融云->腾讯
      */
-    void groupTransfer(String groupId);
+    void groupTransfer();
 
     void joinImGroup(String roomId, BasicUserInfo userInfo, String serverProvider, List<Long> studentIds) throws Exception;
 

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java

@@ -30,4 +30,6 @@ public interface SysUserService{
     Map<Long,com.yonge.cooleshow.biz.dal.entity.SysUser> getMapByIds(List<Long> userIds);
 
     SysUser findUserByPhone(String phone);
+
+    SysUser getByUserId(Long userId);
 }

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

@@ -719,9 +719,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     @Override
     public void importInfo(List<ImHistoryMessage> info) throws Exception {
 
-        info.forEach(i -> {
+        for (ImHistoryMessage i : info) {//判断消息类型
+            log.info("消息导入:{}",i);
             try {
-                //判断消息类型
                 Integer type = i.getTargetType();
                 if (type == 1) {
                     //单聊会话
@@ -745,7 +745,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                     //设置接收人
                     privateImportMessage.setToAccount(i.getTargetId());
                     //设置随机数
-//                    privateImportMessage.setMsgRandom(new Random().nextInt());
+                    privateImportMessage.setMsgRandom(new Random().nextInt());
 
                     //设置发送时间
                     String time = i.getDateTime();
@@ -778,23 +778,23 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         int gifDataSize = jsonObject.getInteger("gifDataSize");
                         int width = jsonObject.getInteger("width");
                         int height = jsonObject.getInteger("height");
-                        TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl,gifDataSize,width,height);
+                        TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl, gifDataSize, width, height);
                         list.add(body1);
-                    } else if (i.getClassname().equals("RC:HQVCMsg")){
+                    } else if (i.getClassname().equals("RC:HQVCMsg")) {
                         //语音
                         String remoteUrl = jsonObject.getString("remoteUrl");
                         int duration = jsonObject.getInteger("duration");
-                        TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl,duration);
+                        TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl, duration);
                         list.add(body1);
-                    } else if(i.getClassname().equals("RC:FileMsg")){
+                    } else if (i.getClassname().equals("RC:FileMsg")) {
                         //文件
                         String fileUrl = jsonObject.getString("fileUrl");
                         String size = jsonObject.getString("size");
                         String name = jsonObject.getString("name");
 
-                        TencentRequest.MessageBody body1 = getTimFileElem(fileUrl,size,name);
+                        TencentRequest.MessageBody body1 = getTimFileElem(fileUrl, size, name);
                         list.add(body1);
-                    } else if(i.getClassname().equals("RC:SightMsg")){
+                    } else if (i.getClassname().equals("RC:SightMsg")) {
                         //视频
                         String sightUrl = jsonObject.getString("sightUrl");
                         String size = jsonObject.getString("size");
@@ -802,26 +802,26 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         String content = jsonObject.getString("content");
                         TencentRequest.MessageBody body1 = null;
                         try {
-                            body1 = getTimVideoFileElem(sightUrl,size,duration,content);
+                            body1 = getTimVideoFileElem(sightUrl, size, duration, content);
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
                         list.add(body1);
-                    } else if(i.getClassname().equals("RC:LBSMsg")) {
+                    } else if (i.getClassname().equals("RC:LBSMsg")) {
                         //位置
                         double latitude = jsonObject.getDouble("latitude");
                         double longitude = jsonObject.getDouble("longitude");
                         String poi = jsonObject.getString("poi");
                         TencentRequest.MessageBody body1 = getTimLocationElem(latitude, longitude, poi);
                         list.add(body1);
-                    } else if (i.getClassname().equals("RC:ImgTextMsg")){
+                    } else if (i.getClassname().equals("RC:ImgTextMsg")) {
                         //图文
                         TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimTextElem(jsonObject.getString("content"));
                         TencentRequest.MessageBody body2 = CustomerServiceBatchSendingServiceImpl.getTimImageElem(jsonObject.getString("imageUri"));
                         list.add(body1);
                         list.add(body2);
                     } else {
-                        return;
+                        continue;
                     }
 
                /* body.setMsgType(i.getClassname());
@@ -846,7 +846,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         //为已导入数据更改标识
                         imGroupService.updateStatus(info);
                     } catch (Exception e) {
-                        log.error("导入私聊IM消息失败 msg:{}",list,e);
+                        log.error("导入私聊IM消息失败 msg:{},entity:{}", list,i, e);
                     }
                 } else if (type == 3) {
                     //群组会话
@@ -904,23 +904,23 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         int gifDataSize = jsonObject.getInteger("gifDataSize");
                         int width = jsonObject.getInteger("width");
                         int height = jsonObject.getInteger("height");
-                        TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl,gifDataSize,width,height);
+                        TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl, gifDataSize, width, height);
                         bodyList.add(body1);
-                    } else if (i.getClassname().equals("RC:HQVCMsg")){
+                    } else if (i.getClassname().equals("RC:HQVCMsg")) {
                         //语音
                         String remoteUrl = jsonObject.getString("remoteUrl");
                         int duration = jsonObject.getInteger("duration");
-                        TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl,duration);
+                        TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl, duration);
                         bodyList.add(body1);
-                    } else if(i.getClassname().equals("RC:FileMsg")){
+                    } else if (i.getClassname().equals("RC:FileMsg")) {
                         //文件
                         String fileUrl = jsonObject.getString("fileUrl");
                         String size = jsonObject.getString("size");
                         String name = jsonObject.getString("name");
 
-                        TencentRequest.MessageBody body1 = getTimFileElem(fileUrl,size,name);
+                        TencentRequest.MessageBody body1 = getTimFileElem(fileUrl, size, name);
                         bodyList.add(body1);
-                    } else if(i.getClassname().equals("RC:SightMsg")){
+                    } else if (i.getClassname().equals("RC:SightMsg")) {
                         //视频
                         String sightUrl = jsonObject.getString("sightUrl");
                         String size = jsonObject.getString("size");
@@ -928,31 +928,31 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         String content = jsonObject.getString("content");
                         TencentRequest.MessageBody body1 = null;
                         try {
-                            body1 = getTimVideoFileElem(sightUrl,size,duration,content);
+                            body1 = getTimVideoFileElem(sightUrl, size, duration, content);
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
                         bodyList.add(body1);
-                    } else if(i.getClassname().equals("RC:LBSMsg")) {
+                    } else if (i.getClassname().equals("RC:LBSMsg")) {
                         //位置
                         double latitude = jsonObject.getDouble("latitude");
                         double longitude = jsonObject.getDouble("longitude");
                         String poi = jsonObject.getString("poi");
                         TencentRequest.MessageBody body1 = getTimLocationElem(latitude, longitude, poi);
                         bodyList.add(body1);
-                    } else if (i.getClassname().equals("RC:ImgTextMsg")){
+                    } else if (i.getClassname().equals("RC:ImgTextMsg")) {
                         //图文
                         TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimTextElem(jsonObject.getString("content"));
                         TencentRequest.MessageBody body2 = CustomerServiceBatchSendingServiceImpl.getTimImageElem(jsonObject.getString("imageUri"));
                         bodyList.add(body1);
                         bodyList.add(body2);
-                    } else if (i.getClassname().equals("RC:CombineMsg")){
+                    } else if (i.getClassname().equals("RC:CombineMsg")) {
                         //合并转发
                         String remoteUrl = jsonObject.getString("remoteUrl");
                         int conversationType = jsonObject.getInteger("conversationType");
                         getTimRelayElem();
                     } else {
-                        return;
+                        continue;
                     }
                 /*body.setMsgContent(i.getContent());
                 body.setMsgType(i.getClassname());*/
@@ -975,14 +975,14 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         //为已导入数据更改标识
                         imGroupService.updateStatus(info);
                     } catch (Exception e) {
-                        log.error("导入群组IM消息失败 msg:{}",list,e);
+                        log.error("导入群组IM消息失败 msg:{},entity:{}", list,i, e);
                     }
                 }
+                log.info("导入消息成功:{}",i);
             } catch (Exception e) {
-                log.error("导入失败,{}",i,e);
+                log.error("导入消息失败:",e);
             }
-
-        });
+        }
     }
 
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
@@ -1159,12 +1159,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
      * 群迁移
      */
     @Override
-    public void groupTransfer(String groupId) {
-        if (StringUtils.isNotBlank(groupId)) {
-            ImGroup byId = this.getById(groupId);
-            groupTransfer(Collections.singletonList(byId));
-            return;
-        }
+    public void groupTransfer() {
         int page = 1;
         int size = 100;
         List<ImGroup> imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
@@ -1175,9 +1170,6 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
             page++;
             imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
                     .last("limit " + ((page - 1) * size) + "," + size).list();
-            if (CollectionUtils.isNotEmpty(imGroups)) {
-                groupTransfer(imGroups);
-            }
         }
     }
 
@@ -1282,11 +1274,22 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         String courseIcon = sysConfigService.findConfigValue(SysConfigConstant.ICON_COURSE_GROUP_DEFAULT);
         String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
         for (ImGroup imGroup : records) {
+
+            log.info("群迁移开始:{}", imGroup.getId());
+            // 先删除群组
+            try {
+                // 解散群
+                imPluginContext.getPluginService().groupDismiss(imGroup.getId(), new ArrayList<>());
+            } catch (Exception e) {
+                log.error(String.format("群迁移删除群聊失败:%s", e.getMessage()),e);
+            }
+
             List<ImGroupMember> memberList = imGroupMemberService.lambdaQuery()
                     .eq(ImGroupMember::getGroupId, imGroup.getId())
                     .list();
             ImGroupMember admin = memberList.stream().filter(ImGroupMember::getIsAdmin).findFirst().orElse(null);
             if (admin == null) {
+                log.info("群主不存在,groupId:{}",imGroup.getId());
                 continue;
             }
             try {
@@ -1348,11 +1351,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 log.error(String.format("群迁移加入群聊失败:%s", e.getMessage()));
                 log.error("群迁移加入群聊失败",e);
             }
+            log.info("群迁移成功:{}", imGroup.getId());
         }
     }
 
     private void register(Long userId, String imGroupId, String avatar, Boolean admin, ClientEnum clientType) {
-        SysUser user = sysUserService.findUserById(userId);
+        SysUser user = sysUserService.getByUserId(userId);
 
         // 群组默认头象
         List<GroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();

+ 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点,关闭腾讯直播间, 融云直播间自动关闭,不做处理

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

@@ -129,4 +129,9 @@ public class SysUserServiceImpl implements SysUserService {
 
         return sysUserMapper.findUserByPhone(phone);
     }
+
+    @Override
+    public SysUser getByUserId(Long userId) {
+        return sysUserMapper.getByUserId(userId);
+    }
 }

+ 21 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -111,5 +111,26 @@
     <select id="findUserByPhone" resultType="com.yonge.cooleshow.auth.api.entity.SysUser">
         SELECT * FROM sys_user WHERE phone_ = #{phone} AND del_flag_ = 0
     </select>
+
+    <select id="getByUserId" resultType="com.yonge.cooleshow.auth.api.entity.SysUser">
+        select id_ as id,
+               username_ as username,
+               password_ as password,
+               salt_ as salt,
+               phone_ as phone,
+               avatar_ as avatar,
+               lock_flag_ as lockFlag,
+               user_type_ as userType,
+               gender_ as gender,
+               nation_ as nation,
+               birthdate_ as birthdate,
+               email_ as email,
+               im_token_ as imToken,
+               real_name_ as realName,
+               id_card_no_ as idCardNo,
+               certificate_type_ as certificateType
+        from sys_user
+        where id_ = #{userId}
+    </select>
     <!--客服消息接收者-->
 </mapper>

+ 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"),