|
|
@@ -10,12 +10,14 @@ import org.dromara.common.core.service.OssService;
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.main.domain.CsMessage;
|
|
|
import org.dromara.main.domain.CsSeatConfig;
|
|
|
import org.dromara.main.domain.CsSeatWaiter;
|
|
|
import org.dromara.main.domain.CsSession;
|
|
|
import org.dromara.main.domain.MainCompanyApply;
|
|
|
import org.dromara.main.domain.bo.CsSessionBo;
|
|
|
import org.dromara.main.domain.vo.CsSessionVo;
|
|
|
+import org.dromara.main.mapper.CsMessageMapper;
|
|
|
import org.dromara.main.mapper.CsSeatConfigMapper;
|
|
|
import org.dromara.main.mapper.CsSeatWaiterMapper;
|
|
|
import org.dromara.main.mapper.CsSessionMapper;
|
|
|
@@ -40,6 +42,7 @@ import java.util.stream.Collectors;
|
|
|
public class CsSessionServiceImpl implements ICsSessionService {
|
|
|
|
|
|
private final CsSessionMapper baseMapper;
|
|
|
+ private final CsMessageMapper messageMapper;
|
|
|
private final CsSeatConfigMapper seatConfigMapper;
|
|
|
private final CsSeatWaiterMapper seatWaiterMapper;
|
|
|
private final MainCompanyApplyMapper mainCompanyApplyMapper;
|
|
|
@@ -87,6 +90,37 @@ public class CsSessionServiceImpl implements ICsSessionService {
|
|
|
return enrichSessionVo(converter.convert(newSession, CsSessionVo.class));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public CsSessionVo createOrGetSession(Integer sessionType, Long fromUserId,
|
|
|
+ String fromUserName, String fromUserAvatar,
|
|
|
+ String sourceId, Long guestUserId) {
|
|
|
+ // 如果有访客ID,先做会话迁移
|
|
|
+ if (guestUserId != null && !guestUserId.equals(fromUserId)) {
|
|
|
+ migrateGuestSession(guestUserId, fromUserId, fromUserName, fromUserAvatar);
|
|
|
+ }
|
|
|
+ return createOrGetSession(sessionType, fromUserId, fromUserName, fromUserAvatar, sourceId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void migrateGuestSession(Long guestUserId, Long realUserId, String realUserName, String realUserAvatar) {
|
|
|
+ // 1. 更新访客会话归属到真实用户
|
|
|
+ baseMapper.update(null,
|
|
|
+ Wrappers.lambdaUpdate(CsSession.class)
|
|
|
+ .set(CsSession::getFromUserId, realUserId)
|
|
|
+ .set(CsSession::getFromUserName, realUserName)
|
|
|
+ .set(CsSession::getFromUserAvatar, realUserAvatar)
|
|
|
+ .eq(CsSession::getFromUserId, guestUserId)
|
|
|
+ .eq(CsSession::getStatus, 1));
|
|
|
+
|
|
|
+ // 2. 更新访客消息的发送者ID到真实用户
|
|
|
+ messageMapper.update(null,
|
|
|
+ Wrappers.lambdaUpdate(CsMessage.class)
|
|
|
+ .set(CsMessage::getSenderId, realUserId)
|
|
|
+ .eq(CsMessage::getSenderId, guestUserId));
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public TableDataInfo<CsSessionVo> queryPageList(CsSessionBo bo, PageQuery pageQuery) {
|
|
|
LambdaQueryWrapper<CsSession> lqw = buildQueryWrapper(bo);
|