Przeglądaj źródła

融云同步代码提交

haonan 1 rok temu
rodzic
commit
5e08350755

+ 65 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.admin.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -8,10 +9,13 @@ import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.validator.ValidationKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.BindingResult;
@@ -19,6 +23,11 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.io.File;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -65,5 +74,61 @@ public class ImGroupController extends BaseController {
         imGroupService.quit(groupId,sysUserService.getUserId(), ClientEnum.STUDENT);
         return succeed();
     }
+
+
+
+    @GetMapping(value = "/syncImHistoryMessageTask")
+    // 融云同步即时通讯聊天记录
+    public void syncImHistoryMessageTask(String date) throws Exception {
+        if (date == null) {
+            date = DateUtil.format(DateUtil.addHours(new Date(), -2), DateUtil.YEAR_MONTH_DAY_HOUR);
+        }
+        // 获取输入日期
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHH");
+        Date currentDate = format.parse(date);
+
+        // 创建Calendar对象 设置为输入时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+
+        // 将日期减少一天
+        calendar.add(Calendar.DATE, -1);
+
+        // 获取减少一天后的日期
+        Date tommorow = calendar.getTime();
+
+        calendar.setTime(currentDate);
+
+        //按照小时递减
+        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);
+                if(!success){
+                    return;
+                }*/
+                String url = jsonObject.getString("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()));
+                }
+
+            }
+            calendar.add(Calendar.HOUR, -1);
+            currentDate = calendar.getTime();
+        }
+
+    }
+
+
+
+
 }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java

@@ -23,5 +23,8 @@ public interface ImGroupDao extends BaseMapper<ImGroup> {
 
     //更新群成员数量
     void updateMemberNum(@Param("groupId") String groupId);
+
+    //批量插入历史数据
+    void batchInsert(@Param("list") List<ImHistoryMessage> historyMessages);
 }
 

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImHistoryMessage.java

@@ -0,0 +1,9 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+/**
+ * @Author:haonan
+ * @Date:2023/8/14 11:35
+ * @Filename:ImHistoryMessage
+ */
+public class ImHistoryMessage {
+}

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

@@ -6,7 +6,9 @@ import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import io.rong.models.Result;
 
+import java.io.File;
 import java.util.List;
 
 /**
@@ -85,5 +87,22 @@ public interface ImGroupService extends IService<ImGroup> {
      * @return ImGroup
      */
     ImGroup findGroupInfoById(String groupId, Long userId);
+
+
+    /**
+     * 同步即时通讯聊天记录
+     * @param date
+     * @return
+     */
+    Result historyGet (String date)throws Exception;
+
+    /**
+     * 保存历史消息
+     * @param file
+     */
+    void saveImHistoryMessage(File file);
+
+
+
 }
 

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -11,15 +12,11 @@ import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
-import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
-import com.yonge.cooleshow.biz.dal.entity.ImGroup;
-import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
-import com.yonge.cooleshow.biz.dal.entity.Teacher;
+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.service.*;
-import com.yonge.cooleshow.biz.dal.entity.StudentStar;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
@@ -33,6 +30,8 @@ import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.ThreadPool;
+import io.rong.RongCloud;
+import io.rong.methods.message.history.History;
 import io.rong.models.Result;
 import io.rong.models.group.GroupMember;
 import io.rong.models.group.GroupModel;
@@ -46,16 +45,15 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.concurrent.TimeUnit;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
 
 /**
  * 即时通讯群组(ImGroup)表服务实现类
@@ -385,5 +383,71 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
 
         return group;
     }
+
+
+
+    /**
+     * 同步即时通讯聊天记录
+     *
+     * @param date
+     * @return
+     */
+    @Override
+    public Result historyGet(String date) throws Exception {
+        return getHistory().get(date);
+
+    }
+
+    private History getHistory() {
+        RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);
+        History history = new History(appKey, appSecret);
+        history.setRongCloud(rongCloud);
+        return history;
+    }
+
+
+    @Override
+    public void saveImHistoryMessage(File file) {
+        ZipInputStream zin = null;
+        try {
+            zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
+            ZipFile zf = new ZipFile(file);
+            ZipEntry ze;
+            Set<ImHistoryMessage> historyMessages = new HashSet<>();
+            while ((ze = zin.getNextEntry()) != null) {
+                BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
+                String line;
+                while ((line = br.readLine()) != null) {
+                    try {
+                        historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")),
+                                ImHistoryMessage.class));
+//						if(historyMessages.size() >= 2000){
+//							historyMessageDao.batchInsert(new ArrayList<>(historyMessages),HistoryMessage.class);
+//							historyMessages.clear();
+//						}
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                br.close();
+                break;
+            }
+            if (historyMessages.size() > 0) {
+                ImGroupDao dao = getDao();
+                dao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (zin != null) {
+                try {
+                    zin.closeEntry();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
 }
 

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

@@ -92,4 +92,21 @@
         </if>
         GROUP BY ig.id_
     </select>
+
+    <insert id="batchInsert" parameterType="com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage">
+        insert into im_history_message(msgUID_,fromUserId_,targetId_,targetType_,
+        GroupId_,busChannel_,classname_,content_,
+        extraContent_,dateTime_,source_,isDiscard_,
+        isSensitiveWord_,isForbidden_,isNotForward_,
+        groupUserIds_,appId_)
+        values
+        <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})
+        </foreach>
+    </insert>
 </mapper>