gateway tomcat去除

This commit is contained in:
2025-12-22 17:03:37 +08:00
parent e09817015e
commit b023bec261
55 changed files with 1926 additions and 260 deletions

View File

@@ -1 +1,2 @@
export * from './workcase'
export * from './workcaseChat'

View File

@@ -0,0 +1,301 @@
import { api } from '@/api/index'
import type { ResultDomain, PageRequest } from '@/types'
import type { TbChat, TbChatMessage, ChatPrepareData } from '@/types/ai'
import type { TbWorkcaseDTO } from '@/types/workcase/workcase'
import type {
TbChatRoomDTO,
TbChatRoomMemberDTO,
TbChatRoomMessageDTO,
TbCustomerServiceDTO,
TbWordCloudDTO,
ChatRoomVO,
ChatMemberVO,
ChatRoomMessageVO,
CustomerServiceVO
} from '@/types/workcase/chatRoom'
/**
* @description 工单对话相关接口
* @filename workcaseChat.ts
* @author cascade
* @copyright xyzh
* @since 2025-12-22
*/
export const workcaseChatAPI = {
baseUrl: '/urban-lifeline/workcase/chat',
// ====================== AI对话管理 ======================
/**
* 创建对话
*/
async createChat(chat: TbChat): Promise<ResultDomain<TbChat>> {
const response = await api.post<TbChat>(`${this.baseUrl}`, chat)
return response.data
},
/**
* 更新对话
*/
async updateChat(chat: TbChat): Promise<ResultDomain<TbChat>> {
const response = await api.put<TbChat>(`${this.baseUrl}`, chat)
return response.data
},
/**
* 查询对话列表
*/
async getChatList(filter: TbChat): Promise<ResultDomain<TbChat>> {
const response = await api.post<TbChat>(`${this.baseUrl}/list`, filter)
return response.data
},
/**
* 获取对话消息列表
*/
async getChatMessageList(filter: TbChat): Promise<ResultDomain<TbChatMessage>> {
const response = await api.post<TbChatMessage>(`${this.baseUrl}/message/list`, filter)
return response.data
},
/**
* 准备对话会话
*/
async prepareChatMessageSession(prepareData: ChatPrepareData): Promise<ResultDomain<string>> {
const response = await api.post<string>(`${this.baseUrl}/prepare`, prepareData)
return response.data
},
/**
* 流式对话SSE- 返回EventSource URL
*/
getStreamUrl(sessionId: string): string {
return `${this.baseUrl}/stream/${sessionId}`
},
/**
* 停止对话
*/
async stopChat(filter: TbChat, taskId: string): Promise<ResultDomain<boolean>> {
const response = await api.post<boolean>(`${this.baseUrl}/stop/${taskId}`, filter)
return response.data
},
/**
* 评论对话消息
*/
async commentChatMessage(filter: TbChat, messageId: string, comment: string): Promise<ResultDomain<boolean>> {
const response = await api.post<boolean>(`${this.baseUrl}/comment`, filter, {
params: { messageId, comment }
})
return response.data
},
// ====================== 对话分析 ======================
/**
* 分析对话AI预填工单信息
*/
async analyzeChat(chatId: string): Promise<ResultDomain<TbWorkcaseDTO>> {
const response = await api.get<TbWorkcaseDTO>(`${this.baseUrl}/analyze/${chatId}`)
return response.data
},
/**
* 总结对话
*/
async summaryChat(chatId: string): Promise<ResultDomain<TbWorkcaseDTO>> {
const response = await api.post<TbWorkcaseDTO>(`${this.baseUrl}/summary/${chatId}`)
return response.data
},
// ====================== ChatRoom聊天室管理 ======================
/**
* 创建聊天室
*/
async createChatRoom(chatRoom: TbChatRoomDTO): Promise<ResultDomain<TbChatRoomDTO>> {
const response = await api.post<TbChatRoomDTO>(`${this.baseUrl}/room`, chatRoom)
return response.data
},
/**
* 更新聊天室
*/
async updateChatRoom(chatRoom: TbChatRoomDTO): Promise<ResultDomain<TbChatRoomDTO>> {
const response = await api.put<TbChatRoomDTO>(`${this.baseUrl}/room`, chatRoom)
return response.data
},
/**
* 关闭聊天室
*/
async closeChatRoom(roomId: string, closedBy: string): Promise<ResultDomain<boolean>> {
const response = await api.post<boolean>(`${this.baseUrl}/room/${roomId}/close`, null, {
params: { closedBy }
})
return response.data
},
/**
* 获取聊天室详情
*/
async getChatRoomById(roomId: string): Promise<ResultDomain<TbChatRoomDTO>> {
const response = await api.get<TbChatRoomDTO>(`${this.baseUrl}/room/${roomId}`)
return response.data
},
/**
* 分页查询聊天室
*/
async getChatRoomPage(pageRequest: PageRequest<TbChatRoomDTO>): Promise<ResultDomain<ChatRoomVO>> {
const response = await api.post<ChatRoomVO>(`${this.baseUrl}/room/page`, pageRequest)
return response.data
},
// ====================== ChatRoom成员管理 ======================
/**
* 添加聊天室成员
*/
async addChatRoomMember(member: TbChatRoomMemberDTO): Promise<ResultDomain<TbChatRoomMemberDTO>> {
const response = await api.post<TbChatRoomMemberDTO>(`${this.baseUrl}/room/member`, member)
return response.data
},
/**
* 移除聊天室成员
*/
async removeChatRoomMember(memberId: string): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>(`${this.baseUrl}/room/member/${memberId}`)
return response.data
},
/**
* 获取聊天室成员列表
*/
async getChatRoomMemberList(roomId: string): Promise<ResultDomain<ChatMemberVO>> {
const response = await api.get<ChatMemberVO>(`${this.baseUrl}/room/${roomId}/members`)
return response.data
},
// ====================== ChatRoom消息管理 ======================
/**
* 发送聊天室消息
*/
async sendMessage(message: TbChatRoomMessageDTO): Promise<ResultDomain<TbChatRoomMessageDTO>> {
const response = await api.post<TbChatRoomMessageDTO>(`${this.baseUrl}/room/message`, message)
return response.data
},
/**
* 分页查询聊天室消息
*/
async getChatMessagePage(pageRequest: PageRequest<TbChatRoomMessageDTO>): Promise<ResultDomain<ChatRoomMessageVO>> {
const response = await api.post<ChatRoomMessageVO>(`${this.baseUrl}/room/message/page`, pageRequest)
return response.data
},
/**
* 删除聊天室消息
*/
async deleteMessage(messageId: string): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>(`${this.baseUrl}/room/message/${messageId}`)
return response.data
},
// ====================== 客服人员管理 ======================
/**
* 添加客服人员
*/
async addCustomerService(customerService: TbCustomerServiceDTO): Promise<ResultDomain<TbCustomerServiceDTO>> {
const response = await api.post<TbCustomerServiceDTO>(`${this.baseUrl}/customer-service`, customerService)
return response.data
},
/**
* 更新客服人员
*/
async updateCustomerService(customerService: TbCustomerServiceDTO): Promise<ResultDomain<TbCustomerServiceDTO>> {
const response = await api.put<TbCustomerServiceDTO>(`${this.baseUrl}/customer-service`, customerService)
return response.data
},
/**
* 删除客服人员
*/
async deleteCustomerService(userId: string): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>(`${this.baseUrl}/customer-service/${userId}`)
return response.data
},
/**
* 分页查询客服人员
*/
async getCustomerServicePage(pageRequest: PageRequest<TbCustomerServiceDTO>): Promise<ResultDomain<CustomerServiceVO>> {
const response = await api.post<CustomerServiceVO>(`${this.baseUrl}/customer-service/page`, pageRequest)
return response.data
},
/**
* 更新客服在线状态
*/
async updateCustomerServiceStatus(userId: string, status: string): Promise<ResultDomain<boolean>> {
const response = await api.post<boolean>(`${this.baseUrl}/customer-service/${userId}/status`, null, {
params: { status }
})
return response.data
},
/**
* 获取可接待客服列表
*/
async getAvailableCustomerServices(): Promise<ResultDomain<CustomerServiceVO>> {
const response = await api.get<CustomerServiceVO>(`${this.baseUrl}/customer-service/available`)
return response.data
},
/**
* 自动分配客服
*/
async assignCustomerService(roomId: string): Promise<ResultDomain<CustomerServiceVO>> {
const response = await api.post<CustomerServiceVO>(`${this.baseUrl}/room/${roomId}/assign`)
return response.data
},
// ====================== 词云管理 ======================
/**
* 添加词云
*/
async addWordCloud(wordCloud: TbWordCloudDTO): Promise<ResultDomain<TbWordCloudDTO>> {
const response = await api.post<TbWordCloudDTO>(`${this.baseUrl}/wordcloud`, wordCloud)
return response.data
},
/**
* 更新词云
*/
async updateWordCloud(wordCloud: TbWordCloudDTO): Promise<ResultDomain<TbWordCloudDTO>> {
const response = await api.put<TbWordCloudDTO>(`${this.baseUrl}/wordcloud`, wordCloud)
return response.data
},
/**
* 查询词云列表
*/
async getWordCloudList(filter: TbWordCloudDTO): Promise<ResultDomain<TbWordCloudDTO>> {
const response = await api.post<TbWordCloudDTO>(`${this.baseUrl}/wordcloud/list`, filter)
return response.data
},
/**
* 分页查询词云
*/
async getWordCloudPage(pageRequest: PageRequest<TbWordCloudDTO>): Promise<ResultDomain<TbWordCloudDTO>> {
const response = await api.post<TbWordCloudDTO>(`${this.baseUrl}/wordcloud/page`, pageRequest)
return response.data
}
}

View File

@@ -116,7 +116,7 @@
<script setup lang="ts">
import { ref, nextTick } from 'vue'
import { FileText, Video, Paperclip, Send } from 'lucide-vue-next'
import IframeView from 'shared/components/iframe/IframeView.vue'
import IframeView from '@/components/iframe/IframeView.vue'
interface ChatMessageVO {
messageId: string

View File

@@ -1 +1 @@
export { default as ChatRoom } from './ChatRoom.vue';
export { default as ChatRoom } from './chatRoom/ChatRoom.vue';

View File

@@ -28,7 +28,7 @@ export interface TbChatRoomDTO extends BaseDTO {
/**
* 聊天消息DTO
*/
export interface TbChatMessageDTO extends BaseDTO {
export interface TbChatRoomMessageDTO extends BaseDTO {
messageId?: string
roomId?: string
senderId?: string
@@ -174,7 +174,7 @@ export interface ChatRoomVO extends BaseVO {
* 聊天消息VO
* 用于前端展示聊天消息
*/
export interface ChatMessageVO extends BaseVO {
export interface ChatRoomMessageVO extends BaseVO {
messageId?: string
roomId?: string
senderId?: string
@@ -292,3 +292,60 @@ export interface MarkReadParam {
roomId: string
messageIds?: string[]
}
// ==================== 客服相关 ====================
/**
* 客服人员DTO
*/
export interface TbCustomerServiceDTO extends BaseDTO {
userId?: string
userName?: string
status?: string
maxConcurrentChats?: number
currentChatCount?: number
totalServedCount?: number
avgResponseTime?: number
avgRating?: number
skills?: string[]
priority?: number
lastOnlineTime?: string
}
/**
* 客服人员VO
*/
export interface CustomerServiceVO extends BaseVO {
userId?: string
userName?: string
userAvatar?: string
status?: string
statusName?: string
maxConcurrentChats?: number
currentChatCount?: number
totalServedCount?: number
avgResponseTime?: number
avgResponseTimeFormatted?: string
avgRating?: number
skills?: string[]
skillNames?: string[]
priority?: number
lastOnlineTime?: string
isAvailable?: boolean
}
// ==================== 词云相关 ====================
/**
* 词云DTO
*/
export interface TbWordCloudDTO extends BaseDTO {
wordCloudId?: string
word?: string
category?: string
weight?: number
frequency?: number
sentiment?: string
source?: string
relatedWords?: string[]
}