Browse Source

融云数据采集代码

haonan 2 years ago
parent
commit
7c9238cade

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

@@ -2,8 +2,10 @@ package com.yonge.cooleshow.admin.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.tencentyun.TLSSigAPIv2;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
+import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
@@ -11,6 +13,7 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.redis.service.RedisCache;
 import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.http.HttpUtil;
 import com.yonge.toolset.utils.validator.ValidationKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -26,7 +29,11 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.io.File;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
 import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
@@ -83,30 +90,68 @@ public class ImGroupController extends BaseController {
 
 
     @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);
         }
-        Object o = imGroupService.historyGet(date);
-        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(o));
-        if(jsonObject.get("code").equals(200)){
-            Boolean success = redisCache.getRedisTemplate().opsForValue().setIfAbsent("syncImHistoryMessage" + date,date);
-            if(!success){
-                return;
+        // 获取输入日期
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHH");
+        Date currentDate = format.parse(date);
+
+        // 创建Calendar对象 设置为输入时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+
+        // 将日期减少一个月
+        calendar.add(Calendar.MONTH, -1);
+
+        // 获取减少一个月后的日期
+        Date lastMonthDate = calendar.getTime();
+
+        calendar.setTime(currentDate);
+
+        //按照小时递减
+        while (currentDate.after(lastMonthDate))
+        {
+            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;
+                }
+                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()));
             }
-            String url = jsonObject.getString("url");
-            if(StringUtils.isEmpty(url)){
-                return;
-            }
-            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();
         }
+
+    }
+
+
+    @ApiOperation("IM导入消息")
+    @PostMapping(value = "/ImportIM")
+    public void ImportIM() throws Exception {
+
+        //获取融云消息
+        List<ImHistoryMessage> info = imGroupService.getRongYunInfo();
+
+        imGroupService.importInfo(info);
+
+
     }
 
 
 
+
 }
 

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

@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 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.entity.ImHistoryMessage;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 即时通讯群组(ImGroup)表数据库访问层
@@ -23,5 +25,12 @@ public interface ImGroupDao extends BaseMapper<ImGroup> {
 
     //更新群成员数量
     void updateMemberNum(@Param("groupId") String groupId);
+
+    //批量插入历史数据
+    void batchInsert(@Param("list") List<ImHistoryMessage> historyMessages);
+
+    //获取融云数据
+    List<ImHistoryMessage> selectAll();
+
 }
 

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

@@ -7,11 +7,13 @@ 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.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import io.rong.models.Result;
 
 import java.io.File;
+import java.net.MalformedURLException;
 import java.util.List;
 
 /**
@@ -132,5 +134,17 @@ public interface ImGroupService extends IService<ImGroup> {
      * @param file
      */
     void saveImHistoryMessage(File file);
+
+    /**
+     * 读取融云数据库信息
+     */
+    List<ImHistoryMessage> getRongYunInfo();
+
+    /**
+     * 导入IM腾讯云
+     * @param info
+     * @throws Exception
+     */
+    void importInfo(List<ImHistoryMessage> info) throws Exception;
 }
 

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
+import com.microsvc.toolkit.middleware.im.message.MessageWrapper;
 import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -19,7 +20,6 @@ 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.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
@@ -35,6 +35,7 @@ import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.ThreadPool;
+import com.yonge.toolset.utils.http.HttpUtil;
 import io.rong.RongCloud;
 import io.rong.methods.message.history.History;
 import io.rong.models.Result;
@@ -53,6 +54,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.util.*;
@@ -62,6 +66,10 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipInputStream;
 
+import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMImageElem;
+import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMLocationElem;
+import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMTextElem;
+
 /**
  * 即时通讯群组(ImGroup)表服务实现类
  *
@@ -582,7 +590,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 break;
             }
             if(historyMessages.size() > 0){
-                //imGroupDao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()),HistoryMessage.class);
+                ImGroupDao dao = getDao();
+                dao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()));
             }
         } catch (IOException e) {
             e.printStackTrace();
@@ -597,6 +606,50 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         }
     }
 
+    @Override
+    public List<ImHistoryMessage> getRongYunInfo() {
+        List<ImHistoryMessage> list = getDao().selectAll();
+        return list;
+    }
+
+    /**
+     * IM导入消息
+     */
+    @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) {
+                //单聊会话
+                //todo
+            } else if (type == 3) {
+                //群组会话
+                MessageWrapper.GroupImportMessage groupImportMessage = new MessageWrapper.GroupImportMessage();
+                //设置群组Id
+                groupImportMessage.setGroupId(i.getGroupId());
+
+                //导入消息列表
+                List<MessageWrapper.GroupImportMessageData> data = new ArrayList<>();
+
+                //groupImportMessage.setMsgList();
+
+
+                //imPluginContext.getPluginService().importGroupMessage();
+
+
+            }
+        });
+
+
+    }
+
 
     private History getHistory(){
         RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);

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

@@ -18,6 +18,22 @@
     <sql id="Base_Column_List">
         id_, name_, introduce_, member_num_, memo_, img_, type_,create_by_, create_time_, update_time_
     </sql>
+    <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" open="(" close=")">
+                #{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>
 
     <update id="updateById" parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroup">
         update im_group
@@ -92,4 +108,26 @@
         </if>
         GROUP BY ig.id_
     </select>
+    <select id="selectAll" resultType="com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage">
+        select msgUID_          AS msgUID,
+               fromUserId_      AS fromUserId,
+               targetId_        AS targetId,
+               targetType_      AS targetType,
+               GroupId_         AS groupId,
+               busChannel_      AS busChannel,
+               classname_       AS classname,
+               content_         AS content,
+               extraContent_    AS extraContent,
+               dateTime_        AS dateTime,
+               source_          AS source,
+               isDiscard_       AS isDiscard,
+               isSensitiveWord_ AS isSensitiveWord,
+               isForbidden_     AS isForbidden,
+               isNotForward_    AS isNotForward,
+               groupUserIds_    AS groupUserIds,
+               appId_           AS appId
+
+        from im_history_message
+
+    </select>
 </mapper>