Commit d15af2cf authored by shiyu's avatar shiyu

ai会话

parent 998368a1
...@@ -12,12 +12,12 @@ public class IMChatRequestDto extends BaseRequestDto implements Entity { ...@@ -12,12 +12,12 @@ public class IMChatRequestDto extends BaseRequestDto implements Entity {
/** /**
* 普通会话的起始时间,第一页填 0。 * 普通会话的起始时间,第一页填 0。
*/ */
private Integer timeStamp; private Integer timeStamp = 0;
/** /**
* 普通会话的起始位置,第一页填 0。 * 普通会话的起始位置,第一页填 0。
*/ */
private Integer startIndex; private Integer startIndex = 0;
/** /**
* 置顶会话的起始时间,第一页填 0。 * 置顶会话的起始时间,第一页填 0。
......
package com.wwdz.ch.core.entity.im.vo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.List;
@Data
public class ConversationResponse implements Entity {
private List<IMChatVo> dataList;
private Integer timeStamp;
/**
* 结束标识:
* 1:表示已返回全量会话
* 0:表示还有会话没拉完
*/
private Integer completeFlag;
}
...@@ -5,4 +5,34 @@ import lombok.Data; ...@@ -5,4 +5,34 @@ import lombok.Data;
@Data @Data
public class IMChatVo implements Entity { public class IMChatVo implements Entity {
/**
* 拉取会话的用户账号
*/
private String operaterAccount;
/**
* 拉取会话的用户在系统中原始账号
*/
private String orginalOperaterAccount;
/**
* 会话另一方的用户账号
*/
private String toAccount;
/**
* 会话另一方的用户在系统中原始账号
*/
private String orginalToAccount;
/**
* 最后一条消息的时间
*/
private Integer msgTime;
/**
* 会话类型
*/
private Integer type;
} }
...@@ -2,13 +2,14 @@ package com.wwdz.ch.core.im.api; ...@@ -2,13 +2,14 @@ package com.wwdz.ch.core.im.api;
import com.wwdz.ch.core.consts.IMEnum; import com.wwdz.ch.core.consts.IMEnum;
import com.wwdz.ch.core.entity.im.IMChatMsg;
import com.wwdz.ch.core.entity.im.IMChatRequestDto; import com.wwdz.ch.core.entity.im.IMChatRequestDto;
import com.wwdz.ch.core.entity.im.SendChatMsgRequestDto; import com.wwdz.ch.core.entity.im.SendChatMsgRequestDto;
import com.wwdz.ch.core.entity.im.IMChatMsg; import com.wwdz.ch.core.entity.im.vo.ConversationResponse;
import com.wwdz.ch.core.entity.im.vo.IMChatVo;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IMUtil; import com.wwdz.ch.core.util.IMUtil;
import com.wwdz.ch.core.util.OkHttpUtil; import com.wwdz.ch.core.util.OkHttpUtil;
import com.xxdxxs.utils.EntityMapper;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.utils.MapUtils; import com.xxdxxs.utils.MapUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -17,10 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -17,10 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays; import java.io.IOException;
import java.util.HashMap; import java.util.*;
import java.util.Map;
import java.util.Random;
/** /**
* 会话api * 会话api
...@@ -104,8 +103,8 @@ public class ConversationApi { ...@@ -104,8 +103,8 @@ public class ConversationApi {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("From_Account", imUtil.formatUserId(imChatRequestDto.getUserId() + "")); paramMap.put("From_Account", imUtil.formatUserId(imChatRequestDto.getUserId() + ""));
paramMap.put("TimeStamp", 0); paramMap.put("TimeStamp", imChatRequestDto.getTimeStamp());
paramMap.put("StartIndex", 0); paramMap.put("StartIndex", imChatRequestDto.getStartIndex());
paramMap.put("TopTimeStamp", 0); paramMap.put("TopTimeStamp", 0);
paramMap.put("TopStartIndex", 0); paramMap.put("TopStartIndex", 0);
paramMap.put("AssistFlags", 15); paramMap.put("AssistFlags", 15);
...@@ -121,7 +120,43 @@ public class ConversationApi { ...@@ -121,7 +120,43 @@ public class ConversationApi {
logger.error("用户id : {}, 拉取会话列表, errorCode : {}, errmsg : {} ", imChatRequestDto.getUserId(), errorCode, errorInfo); logger.error("用户id : {}, 拉取会话列表, errorCode : {}, errmsg : {} ", imChatRequestDto.getUserId(), errorCode, errorInfo);
return Result.failed(errorInfo); return Result.failed(errorInfo);
} }
ConversationResponse conversationResponse = new ConversationResponse();
String completeFlag = JsonUtils.getValueByPath(responseStr, "CompleteFlag");
String timeStamp = JsonUtils.getValueByPath(responseStr, "TimeStamp");
conversationResponse.setCompleteFlag(Integer.valueOf(completeFlag));
conversationResponse.setTimeStamp(Integer.valueOf(timeStamp));
if (responseStr.contains("SessionItem")) {
String sessionItem = JsonUtils.getValueByPath(responseStr, "SessionItem");
try {
List<IMChatVo> imChatVos = new ArrayList<>();
List<Map<String, Object>> list = JsonUtils.toMapList(sessionItem);
list.forEach(map ->{
IMChatVo imChatVo = new IMChatVo();
imChatVo.setType((Integer) map.get("Type"));
String toAccount = (String) map.get("To_Account");
imChatVo.setToAccount(toAccount);
imChatVo.setOrginalToAccount(imUtil.revertAppletUserId(toAccount));
imChatVo.setMsgTime((Integer) map.get("MsgTime"));
imChatVos.add(imChatVo);
});
conversationResponse.setDataList(imChatVos);
} catch (IOException e) {
logger.error(">>>>>> 解析会话列表出错:{}", e);
return Result.failed();
}
}
logger.info("============= 拉取会话列表成功 ==========="); logger.info("============= 拉取会话列表成功 ===========");
return Result.success(); return Result.success(conversationResponse);
} }
/**
* 拉取历史聊天记录
* @param imChatRequestDto
* @return
*/
public Result getHistoryMsg(IMChatRequestDto imChatRequestDto) {
return null;
}
} }
...@@ -32,9 +32,9 @@ public class IMUtil { ...@@ -32,9 +32,9 @@ public class IMUtil {
* @param userId * @param userId
* @return * @return
*/ */
public long getAppletUserId(String userId) { public String revertAppletUserId(String userId) {
String appletUserId = userId.split("_")[1]; String appletUserId = userId.split("_")[1];
return Long.valueOf(appletUserId); return appletUserId;
} }
......
...@@ -7,6 +7,8 @@ import lombok.Data; ...@@ -7,6 +7,8 @@ import lombok.Data;
@Data @Data
public class AiAssistantRequestDto extends BaseRequestDto implements Entity { public class AiAssistantRequestDto extends BaseRequestDto implements Entity {
private Long userId;
private Integer id; private Integer id;
/** /**
......
...@@ -10,6 +10,11 @@ public class AiAssistantVo implements Entity { ...@@ -10,6 +10,11 @@ public class AiAssistantVo implements Entity {
private Integer id; private Integer id;
/**
* 编号
*/
private String code;
/** /**
* 头像 * 头像
*/ */
......
package com.wwdz.ch.wx.impl; package com.wwdz.ch.wx.impl;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.entity.im.IMChatRequestDto;
import com.wwdz.ch.core.entity.im.vo.ConversationResponse;
import com.wwdz.ch.core.entity.im.vo.IMChatVo;
import com.wwdz.ch.core.im.api.ConversationApi;
import com.wwdz.ch.core.type.PageSearchResult; import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IMUtil;
import com.wwdz.ch.db.dao.AiAssistantDao; import com.wwdz.ch.db.dao.AiAssistantDao;
import com.wwdz.ch.db.domain.AiAssistant; import com.wwdz.ch.db.domain.AiAssistant;
import com.wwdz.ch.db.dto.request.AiAssistantRequestDto; import com.wwdz.ch.db.dto.request.AiAssistantRequestDto;
...@@ -17,6 +22,7 @@ import org.springframework.stereotype.Service; ...@@ -17,6 +22,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* ai助手 * ai助手
...@@ -29,17 +35,53 @@ public class AiAssistantServiceImpl implements AiAssistantService { ...@@ -29,17 +35,53 @@ public class AiAssistantServiceImpl implements AiAssistantService {
@Autowired @Autowired
AiAssistantDao aiAssistantDao; AiAssistantDao aiAssistantDao;
@Autowired
ConversationApi conversationApi;
@Autowired
IMUtil imUtil;
@Override @Override
public Result findList(AiAssistantRequestDto dto) { public Result findList(AiAssistantRequestDto dto) {
try { try {
//查询当前用户的会话列表
int page = 0;
int timeStamp = 0;
boolean isContinue = true;
//所有会话用户的id
List<String> converstionUserIdList = new ArrayList<>();
while(isContinue) {
IMChatRequestDto imChatRequestDto = new IMChatRequestDto();
imChatRequestDto.setUserId(dto.getUserId());
imChatRequestDto.setStartIndex(page);
imChatRequestDto.setTimeStamp(timeStamp);
Result<ConversationResponse> chatResult = conversationApi.getChatList(imChatRequestDto);
if (!chatResult.getSuccess()) {
return Result.failed("获取列表失败");
}
List<IMChatVo> imChatVoList = chatResult.getData().getDataList();
List<String> ids = imChatVoList.stream().map(IMChatVo::getOrginalToAccount).collect(Collectors.toList());
converstionUserIdList.addAll(ids);
if (chatResult.getData().getCompleteFlag() == 1) {
isContinue = false;
} else {
page = page + 1;
timeStamp = chatResult.getData().getTimeStamp();
}
}
List<AiAssistantVo> aiAssistantVos = new ArrayList<>(); List<AiAssistantVo> aiAssistantVos = new ArrayList<>();
List<AiAssistant> aiAssistantList = aiAssistantDao.findList(dto); List<AiAssistant> aiAssistantList = aiAssistantDao.findList(dto);
PageInfo<AiAssistant> pageInfo = new PageInfo<>(aiAssistantList); PageInfo<AiAssistant> pageInfo = new PageInfo<>(aiAssistantList);
aiAssistantList.forEach(aiAssistant -> { aiAssistantList.forEach(aiAssistant -> {
AiAssistantVo aiAssistantVo = new AiAssistantVo(); AiAssistantVo aiAssistantVo = new AiAssistantVo();
EntityMapper.copyAttribute(aiAssistant, aiAssistantVo); EntityMapper.copyAttribute(aiAssistant, aiAssistantVo);
//判断该AI助手是否已有会话
if (converstionUserIdList.contains(aiAssistant.getCode())) {
aiAssistantVo.setIsHasChated(true);
} else {
aiAssistantVo.setIsHasChated(false); aiAssistantVo.setIsHasChated(false);
}
aiAssistantVos.add(aiAssistantVo); aiAssistantVos.add(aiAssistantVo);
}); });
return Result.success(PageSearchResult.of(pageInfo, aiAssistantVos)); return Result.success(PageSearchResult.of(pageInfo, aiAssistantVos));
......
...@@ -69,10 +69,10 @@ public class IMServiceImpl implements IMService { ...@@ -69,10 +69,10 @@ public class IMServiceImpl implements IMService {
public Result findChatList(IMChatRequestDto dto) { public Result findChatList(IMChatRequestDto dto) {
try { try {
Result result = conversationApi.getChatList(dto); Result result = conversationApi.getChatList(dto);
return result;
} catch (Exception e) { } catch (Exception e) {
logger.error("获取会话列表失败:{}", e); logger.error("获取会话列表失败:{}", e);
} }
return Result.failed(); return Result.failed();
} }
......
...@@ -104,7 +104,7 @@ public class ChatApiTest { ...@@ -104,7 +104,7 @@ public class ChatApiTest {
@Test @Test
public void getChatList() { public void getChatList() {
IMChatRequestDto imChatRequestDto = new IMChatRequestDto(); IMChatRequestDto imChatRequestDto = new IMChatRequestDto();
imChatRequestDto.setUserId(241L); imChatRequestDto.setUserId(242L);
conversationApi.getChatList(imChatRequestDto); conversationApi.getChatList(imChatRequestDto);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment