Преглед изворни кода

Merge branch 'feature/0803-im'

liujc пре 2 година
родитељ
комит
4f001ff7d8

+ 15 - 12
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -103,33 +103,36 @@ public class ImGroupController extends BaseController {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(currentDate);
 
-        // 将日期减少一个月
-        calendar.add(Calendar.MONTH, -1);
+        // 将日期减少一
+        calendar.add(Calendar.DATE, -1);
 
-        // 获取减少一个月后的日期
-        Date lastMonthDate = calendar.getTime();
+        // 获取减少一后的日期
+        Date tommorow = calendar.getTime();
 
         calendar.setTime(currentDate);
 
         //按照小时递减
-        while (currentDate.after(lastMonthDate))
+        while (currentDate.after(tommorow))
         {
             String d = DateUtil.format(DateUtil.addHours(currentDate,0), DateUtil.YEAR_MONTH_DAY_HOUR);
             Object o = imGroupService.historyGet(d);
             JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(o));
             if(jsonObject.get("code").equals(200)){
-                Boolean success = redisCache.getRedisTemplate().opsForValue().setIfAbsent("syncImHistoryMessage" + d,d);
+                /*Boolean success = redisCache.getRedisTemplate().opsForValue().setIfAbsent("syncImHistoryMessage" + d,d);
                 if(!success){
                     return;
-                }
+                }*/
                 String url = jsonObject.getString("url");
-                if(StringUtils.isEmpty(url)){
+                /*if(StringUtils.isEmpty(url)){
                     return;
+                }*/
+                if (!StringUtils.isEmpty(url)){
+                    File file = new File(FileUtils.getTempDirectoryPath() + url.substring(url.lastIndexOf("/")));
+                    URL url1 = new URL(url);
+                    FileUtils.copyURLToFile(url1,file);
+                    imGroupService.saveImHistoryMessage(new File(file.getAbsolutePath()));
                 }
-                File file = new File(FileUtils.getTempDirectoryPath() + url.substring(url.lastIndexOf("/")));
-                URL url1 = new URL(url);
-                FileUtils.copyURLToFile(url1,file);
-                imGroupService.saveImHistoryMessage(new File(file.getAbsolutePath()));
+
             }
             calendar.add(Calendar.HOUR,-1);
             currentDate = calendar.getTime();

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

@@ -41,6 +41,7 @@ import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
+import com.yonge.cooleshow.biz.dal.service.CustomerServiceBatchSendingService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
@@ -71,9 +72,10 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -119,6 +121,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     @Autowired
     private StudentStarService studentStarService;
 
+    @Autowired
+    private CustomerServiceBatchSendingService customerServiceBatchSendingService;
+
 
     @Autowired
     private ImPluginContext imPluginContext;
@@ -690,30 +695,68 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
      */
     @Override
     public void importInfo(List<ImHistoryMessage> info) throws Exception {
-        URL url = new URL("https://console.tim.qq.com/v4/im_open_login_svc/account_import");
+
         info.stream().forEach(i -> {
             //判断消息类型
             Integer type = i.getTargetType();
             if (type == 1) {
                 //单聊会话
-
                 MessageWrapper.PrivateImportMessage privateImportMessage = new MessageWrapper.PrivateImportMessage();
                 //2:表示历史消息导入,消息不计入未读计数,且消息不会推送到终端
                 privateImportMessage.setSyncFromOldSystem(2);
                 //设置发送人
-                privateImportMessage.setFromAccount(i.getFromUserId());
+                //根据发送者分场景讨论
+                String id = i.getFromUserId();
+                String imUserId;
+                if (id.contains(":student")){
+                    String[] split = id.split(":");
+                    String userId = split[0];
+                    String clientType = split[1];
+                    imUserId = getImUserId(userId,clientType);
+                } else {
+                    imUserId = getImUserId(id,"teacher");
+                }
+
+                privateImportMessage.setFromAccount(imUserId);
                 //设置接收人
                 privateImportMessage.setToAccount(i.getTargetId());
                 //设置随机数
                 privateImportMessage.setMsgRandom(new Random().nextInt());
-                //设置body
 
+                //设置发送时间
+                String time = i.getDateTime();
+                SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    Date date = df.parse(time);
+                    long dateTime = date.getTime();
+                    dateTime = dateTime / (1000);
+                    privateImportMessage.setMsgTimeStamp(dateTime);
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+
+                //设置body
+                TencentRequest.MessageBody body = new TencentRequest.MessageBody();
                 List<TencentRequest.MessageBody> list = new ArrayList<>();
-                list.stream().forEach(item -> {
+
+                if (i.getClassname().equals("RC:TxtMsg")){
+                    TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimTextElem(i.getContent());
+                    list.add(body1);
+                } else if (i.getClassname().equals("RC:ImgMsg")){
+                    JSONObject jsonObject = JSONObject.parseObject(i.getContent());
+                    TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimImageElem(jsonObject.getJSONObject("user").getString("portraitUri"));
+                    list.add(body1);
+                }
+
+               /* body.setMsgType(i.getClassname());
+                body.setMsgContent(i.getContent());*/
+
+                /*list.add(body);*/
+               /* list.stream().forEach(item->{
                     item.setMsgContent(i.getContent());
                     item.setMsgType(i.getClassname());
-                });
-                if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")) {
+                });*/
+                if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")){
                     //文本对象
                     list.stream().forEach(item -> item.setMsgType("TIMTextElem"));
                 } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
@@ -726,27 +769,61 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
-
-
             } else if (type == 3) {
                 //群组会话
                 MessageWrapper.GroupImportMessage groupImportMessage = new MessageWrapper.GroupImportMessage();
                 List<MessageWrapper.GroupImportMessageData> list = new ArrayList<>();
                 MessageWrapper.GroupImportMessageData data1 = new MessageWrapper.GroupImportMessageData();
                 List<TencentRequest.MessageBody> bodyList = new ArrayList<>();
+                TencentRequest.MessageBody body = new TencentRequest.MessageBody();
                 //设置群组Id
                 groupImportMessage.setGroupId(i.getGroupId());
                 //设置发送人
-                data1.setFromAccount(i.getFromUserId());
+                String imUserId;
+                String id = i.getFromUserId();
+                //根据发送者分场景讨论
+                if (id.contains(":student")){
+                    String[] split = id.split(":");
+                    String userId = split[0];
+                    String clientType = split[1];
+                    imUserId = getImUserId(userId,clientType);
+                } else {
+                    imUserId = getImUserId(id,"teacher");
+                }
+
+
+                data1.setFromAccount(imUserId);
                 //设置随机数
                 data1.setRandom(new Random().nextInt());
                 //设置发送时间
-                data1.setSendTime(Long.parseLong(i.getDateTime()));
-                bodyList.stream().forEach(item -> {
-                    item.setMsgContent(i.getContent());
-                    item.setMsgType(i.getClassname());
-                });
-                if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")) {
+
+                String time = i.getDateTime();
+                SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    Date date = df.parse(time);
+                    long dateTime = date.getTime();
+                    dateTime = dateTime / (1000);
+                    data1.setSendTime(dateTime);
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+                /*bodyList.stream().forEach(item->{
+                            item.setMsgContent(i.getContent());
+                            item.setMsgType(i.getClassname());
+                        });*/
+                if (i.getClassname().equals("RC:TxtMsg")){
+                    TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimTextElem(i.getContent());
+                    bodyList.add(body1);
+                } else if (i.getClassname().equals("RC:ImgMsg")){
+                    JSONObject jsonObject = JSONObject.parseObject(i.getContent());
+                    TencentRequest.MessageBody body1 = CustomerServiceBatchSendingServiceImpl.getTimImageElem(jsonObject.getJSONObject("user").getString("portraitUri"));
+                    bodyList.add(body1);
+                }
+                /*body.setMsgContent(i.getContent());
+                body.setMsgType(i.getClassname());*/
+
+                //文本对象
+                if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")){
                     bodyList.stream().forEach(item -> item.setMsgType("TIMTextElem"));
                 } else if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
                     //暂未支持图文对象
@@ -763,12 +840,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
-
-
             }
         });
-
-
     }
 
 
@@ -785,17 +858,19 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
      */
     @Override
     public void groupTransfer() {
-        int page = 1;
-        int size = 100;
-        List<ImGroup> imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
-                .last("limit " + ((page - 1) * size) + "," + size).list();
-        while (!imGroups.isEmpty()) {
-            groupTransfer(imGroups);
-
-            page++;
-            imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
-                    .last("limit " + ((page - 1) * size) + "," + size).list();
-        }
+//        int page = 1;
+//        int size = 100;
+//        List<ImGroup> imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
+//                .last("limit " + ((page - 1) * size) + "," + size).list();
+//        while (!imGroups.isEmpty()) {
+//            groupTransfer(imGroups);
+//
+//            page++;
+//            imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
+//                    .last("limit " + ((page - 1) * size) + "," + size).list();
+//        }
+        ImGroup byId = this.getById("9f677fcd-9d80-4db0-8beb-0ff04e6a98f6FAN");
+        groupTransfer(Collections.singletonList(byId));
     }
 
     private void groupTransfer(List<ImGroup> records) {
@@ -853,8 +928,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                             data.setUnreadMsgNum(0);
                             return data;
                         }).collect(Collectors.toList());
-                importGroupMember.setMemberList(members);
-                imPluginContext.getPluginService().importGroupMember(importGroupMember);
+                List<List<MessageWrapper.ImportGroupMemberData>> partition = Lists.partition(members, 6);
+                for (List<MessageWrapper.ImportGroupMemberData> importGroupMemberData : partition) {
+                    importGroupMember.setMemberList(importGroupMemberData);
+                    imPluginContext.getPluginService().importGroupMember(importGroupMember);
+                }
             } catch (Exception e) {
                 log.error(String.format("群迁移加入群聊失败:%s", e.getMessage()));
             }

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

@@ -25,13 +25,13 @@
                                        isSensitiveWord_,isForbidden_,isNotForward_,
                                        groupUserIds_,appId_)
         values
-               <foreach collection="list" separator="," item="item" open="(" close=")">
-                #{item.msgUID,jdbcType=VARCHAR},#{item.fromUserId,jdbcType=VARCHAR},#{item.targetId,jdbcType=VARCHAR},
+               <foreach collection="list" separator="," item="item" >
+                   (#{item.msgUID,jdbcType=VARCHAR},#{item.fromUserId,jdbcType=VARCHAR},#{item.targetId,jdbcType=VARCHAR},
                    #{item.targetType},#{item.groupId,jdbcType=VARCHAR},#{item.busChannel,jdbcType=VARCHAR},
                    #{item.classname,jdbcType=VARCHAR},#{item.content,jdbcType=VARCHAR},#{item.extraContent,jdbcType=VARCHAR},
                    #{item.dateTime,jdbcType=VARCHAR},#{item.source,jdbcType=VARCHAR},#{item.isDiscard,jdbcType=VARCHAR},
                    #{item.isSensitiveWord,jdbcType=VARCHAR},#{item.isForbidden,jdbcType=VARCHAR},#{item.isNotForward,jdbcType=VARCHAR},
-                   #{item.groupUserIds,jdbcType=VARCHAR},#{item.appId,jdbcType=VARCHAR}
+                   #{item.groupUserIds,jdbcType=VARCHAR},#{item.appId,jdbcType=VARCHAR})
                </foreach>
     </insert>