|
|
@@ -9,6 +9,7 @@ import io.github.linpeilie.Converter;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.common.core.service.OssService;
|
|
|
import org.dromara.common.oss.core.OssClient;
|
|
|
import org.dromara.common.oss.entity.UploadResult;
|
|
|
import org.dromara.common.oss.factory.OssFactory;
|
|
|
@@ -18,7 +19,9 @@ import org.dromara.main.domain.CsSession;
|
|
|
import org.dromara.main.domain.bo.CsMessageBo;
|
|
|
import org.dromara.main.domain.vo.CsMessageVo;
|
|
|
import org.dromara.main.mapper.CsMessageMapper;
|
|
|
+import org.dromara.main.mapper.CsSeatConfigMapper;
|
|
|
import org.dromara.main.mapper.CsSessionMapper;
|
|
|
+import org.dromara.main.mapper.MainCompanyApplyMapper;
|
|
|
import org.dromara.main.service.ICsMessageService;
|
|
|
import org.dromara.main.service.ICsSessionService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -27,6 +30,16 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.InputStream;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import org.dromara.system.domain.SysUser;
|
|
|
+import org.dromara.system.mapper.SysUserMapper;
|
|
|
+import org.dromara.main.domain.CsSeatConfig;
|
|
|
+import org.dromara.main.domain.MainCompanyApply;
|
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
|
@@ -34,6 +47,10 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
|
|
|
private final CsMessageMapper baseMapper;
|
|
|
private final CsSessionMapper sessionMapper;
|
|
|
+ private final CsSeatConfigMapper seatConfigMapper;
|
|
|
+ private final MainCompanyApplyMapper mainCompanyApplyMapper;
|
|
|
+ private final OssService ossService;
|
|
|
+ private final SysUserMapper sysUserMapper;
|
|
|
private final ICsSessionService sessionService;
|
|
|
private final Converter converter;
|
|
|
|
|
|
@@ -49,7 +66,8 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
|
|
|
Page<CsMessage> page = baseMapper.selectPage(pageQuery.build(), lqw);
|
|
|
Page<CsMessageVo> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
|
|
|
- voPage.setRecords(converter.convert(page.getRecords(), CsMessageVo.class));
|
|
|
+ List<CsMessageVo> records = converter.convert(page.getRecords(), CsMessageVo.class);
|
|
|
+ voPage.setRecords(enrichMessageVos(records, sessionMapper.selectById(sessionId)));
|
|
|
return TableDataInfo.build(voPage);
|
|
|
}
|
|
|
|
|
|
@@ -211,4 +229,81 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+ private List<CsMessageVo> enrichMessageVos(List<CsMessageVo> records, CsSession session) {
|
|
|
+ if (records == null || records.isEmpty()) {
|
|
|
+ return records;
|
|
|
+ }
|
|
|
+ Map<Long, SysUser> waiterMap = loadWaiterMap(records);
|
|
|
+ CsSeatConfig seat = session != null && session.getSeatId() != null ? seatConfigMapper.selectById(session.getSeatId()) : null;
|
|
|
+ MainCompanyApply companyApply = loadCompanyApply(session);
|
|
|
+ records.forEach(item -> enrichMessageVo(item, session, seat, companyApply, waiterMap));
|
|
|
+ return records;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void enrichMessageVo(CsMessageVo vo, CsSession session, CsSeatConfig seat, MainCompanyApply companyApply, Map<Long, SysUser> waiterMap) {
|
|
|
+ if (vo == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (Objects.equals(vo.getSenderType(), 2)) {
|
|
|
+ SysUser waiter = waiterMap.get(vo.getSenderId());
|
|
|
+ if (waiter != null) {
|
|
|
+ vo.setSenderName(StrUtil.blankToDefault(waiter.getNickName(), waiter.getUserName()));
|
|
|
+ vo.setSenderAvatar(seat != null ? seat.getAvatar() : null);
|
|
|
+ vo.setSenderRole("waiter");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (Objects.equals(vo.getSenderType(), 3)) {
|
|
|
+ vo.setSenderName("系统消息");
|
|
|
+ vo.setSenderRole("system");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (session != null) {
|
|
|
+ vo.setSenderName(session.getFromUserName());
|
|
|
+ vo.setSenderAvatar(resolveFromUserAvatar(session, companyApply));
|
|
|
+ vo.setSenderRole("user");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private MainCompanyApply loadCompanyApply(CsSession session) {
|
|
|
+ if (session == null || session.getSessionType() == null || session.getSessionType() != 2) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return mainCompanyApplyMapper.selectOne(
|
|
|
+ Wrappers.lambdaQuery(MainCompanyApply.class)
|
|
|
+ .and(wrapper -> wrapper
|
|
|
+ .eq(MainCompanyApply::getTenantId, String.valueOf(session.getFromUserId()))
|
|
|
+ .or()
|
|
|
+ .eq(MainCompanyApply::getId, session.getFromUserId())
|
|
|
+ .or()
|
|
|
+ .eq(StrUtil.isNotBlank(session.getFromUserName()), MainCompanyApply::getCompanyName, session.getFromUserName()))
|
|
|
+ .orderByDesc(MainCompanyApply::getCreateTime)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private String resolveFromUserAvatar(CsSession session, MainCompanyApply companyApply) {
|
|
|
+ if (session != null && StrUtil.isNotBlank(session.getFromUserAvatar())) {
|
|
|
+ return session.getFromUserAvatar();
|
|
|
+ }
|
|
|
+ if (companyApply != null && companyApply.getAvatar() != null) {
|
|
|
+ return ossService.selectUrlByIds(companyApply.getAvatar().toString());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<Long, SysUser> loadWaiterMap(List<CsMessageVo> records) {
|
|
|
+ List<Long> waiterIds = records.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getSenderType(), 2))
|
|
|
+ .map(CsMessageVo::getSenderId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (waiterIds.isEmpty()) {
|
|
|
+ return Collections.emptyMap();
|
|
|
+ }
|
|
|
+ return sysUserMapper.selectBatchIds(waiterIds).stream()
|
|
|
+ .collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
|
|
|
+ }
|
|
|
}
|