bug修复
This commit is contained in:
+73
-35
@@ -18,6 +18,7 @@ REMOTE_HOST="101.200.208.45"
|
||||
REMOTE_USER="root"
|
||||
REMOTE_DIR="/data/programs/emotion-museum"
|
||||
REMOTE_LOG_DIR="/data/logs/emotion-museum"
|
||||
REMOTE_JAR_NAME="emotion-single-1.0.0.jar"
|
||||
SPRING_PROFILE="test"
|
||||
|
||||
# 颜色输出
|
||||
@@ -41,29 +42,30 @@ log_error() {
|
||||
|
||||
# 检查并构建项目
|
||||
build_project() {
|
||||
log_info "检查项目构建状态..."
|
||||
|
||||
# 检查是否已经构建过并且JAR文件存在
|
||||
if [ -f "$JAR_PATH" ]; then
|
||||
log_info "JAR 文件已存在: $JAR_PATH"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 执行Maven构建
|
||||
log_info "开始构建项目..."
|
||||
if command -v mvn > /dev/null 2>&1; then
|
||||
mvn clean package -DskipTests
|
||||
if [ -f "$JAR_PATH" ]; then
|
||||
log_info "项目构建成功: $JAR_PATH"
|
||||
return 0
|
||||
else
|
||||
log_error "项目构建失败,未找到JAR文件: $JAR_PATH"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
|
||||
# 检查 Maven 是否安装
|
||||
if ! command -v mvn > /dev/null 2>&1; then
|
||||
log_error "未找到Maven命令,请确保已安装Maven"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 执行 Maven 构建
|
||||
log_info "执行: mvn clean package -DskipTests"
|
||||
if ! mvn clean package -DskipTests; then
|
||||
log_error "项目构建失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 JAR 文件是否生成
|
||||
if [ ! -f "$JAR_PATH" ]; then
|
||||
log_error "项目构建失败,未找到JAR文件: $JAR_PATH"
|
||||
log_error "请检查 Maven 构建输出"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "✅ 项目构建成功: $JAR_PATH"
|
||||
log_info "文件大小: $(ls -lh $JAR_PATH | awk '{print $5}')"
|
||||
}
|
||||
|
||||
# 检查 jar 文件是否存在
|
||||
@@ -138,34 +140,70 @@ start_local_service() {
|
||||
# 远程部署 - 上传文件到服务器
|
||||
deploy_to_remote() {
|
||||
log_info "开始远程部署到 $REMOTE_HOST..."
|
||||
|
||||
|
||||
# 检查并构建项目
|
||||
build_project
|
||||
|
||||
|
||||
# 检查 jar 文件
|
||||
check_jar
|
||||
|
||||
|
||||
# 创建远程目录
|
||||
log_info "创建远程目录..."
|
||||
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_DIR"
|
||||
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_LOG_DIR"
|
||||
|
||||
# 上传 jar 文件
|
||||
if ! ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_DIR"; then
|
||||
log_error "创建远程目录失败: $REMOTE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
if ! ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_LOG_DIR"; then
|
||||
log_error "创建远程日志目录失败: $REMOTE_LOG_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 上传 jar 文件并重命名
|
||||
log_info "上传 JAR 文件到远程服务器..."
|
||||
scp "$JAR_PATH" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
|
||||
|
||||
log_info "本地文件: $JAR_PATH"
|
||||
log_info "远程路径: $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$REMOTE_JAR_NAME"
|
||||
|
||||
if ! scp "$JAR_PATH" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$REMOTE_JAR_NAME; then
|
||||
log_error "上传 JAR 文件失败"
|
||||
log_error "请检查:"
|
||||
log_error " 1. SSH 连接是否正常: ssh $REMOTE_USER@$REMOTE_HOST 'ls -la $REMOTE_DIR'"
|
||||
log_error " 2. 本地文件是否存在: ls -la $JAR_PATH"
|
||||
log_error " 3. 远程目录权限: ssh $REMOTE_USER@$REMOTE_HOST 'ls -la $REMOTE_DIR'"
|
||||
exit 1
|
||||
fi
|
||||
log_info "✅ JAR 文件上传成功"
|
||||
|
||||
# 验证远程文件
|
||||
log_info "验证远程文件..."
|
||||
if ! ssh $REMOTE_USER@$REMOTE_HOST "ls -lh $REMOTE_DIR/$REMOTE_JAR_NAME"; then
|
||||
log_error "远程文件验证失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 上传部署脚本
|
||||
log_info "上传部署脚本到远程服务器..."
|
||||
scp "./deploy-server.sh" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
|
||||
|
||||
if ! scp "./deploy-server.sh" $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/; then
|
||||
log_error "上传部署脚本失败"
|
||||
exit 1
|
||||
fi
|
||||
log_info "✅ 部署脚本上传成功"
|
||||
|
||||
# 设置权限
|
||||
ssh $REMOTE_USER@$REMOTE_HOST "chmod +x $REMOTE_DIR/deploy-server.sh"
|
||||
|
||||
log_info "设置远程脚本权限..."
|
||||
if ! ssh $REMOTE_USER@$REMOTE_HOST "chmod +x $REMOTE_DIR/deploy-server.sh"; then
|
||||
log_error "设置脚本权限失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 在远程服务器上执行部署
|
||||
log_info "在远程服务器上执行部署..."
|
||||
ssh $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_DIR && ./deploy-server.sh $SPRING_PROFILE"
|
||||
|
||||
log_info "远程部署完成!"
|
||||
if ! ssh $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_DIR && ./deploy-server.sh $SPRING_PROFILE"; then
|
||||
log_error "远程部署脚本执行失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "✅ 远程部署完成!"
|
||||
show_remote_info
|
||||
}
|
||||
|
||||
# 本地部署 - 检查服务状态
|
||||
|
||||
@@ -47,4 +47,9 @@ public class MessageResponse extends BaseResponse {
|
||||
* 情感分析
|
||||
*/
|
||||
private String emotionAnalysis;
|
||||
|
||||
/**
|
||||
* 消息顺序 - 在同一个会话中递增,用于确保消息展示顺序
|
||||
*/
|
||||
private Long messageOrder;
|
||||
}
|
||||
@@ -169,4 +169,10 @@ public class Message extends BaseEntity {
|
||||
@TableField("coze_content_type")
|
||||
private String cozeContentType;
|
||||
|
||||
/**
|
||||
* 消息顺序 - 在同一个会话中递增,用于确保消息展示顺序
|
||||
*/
|
||||
@TableField("message_order")
|
||||
private Long messageOrder;
|
||||
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getConversationId, conversationId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByDesc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.page(page, wrapper);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getConversationId, conversationId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByAsc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.list(wrapper);
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
wrapper.eq(Message::getConversationId, conversationId)
|
||||
.between(Message::getCreateTime, startTime, endTime)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByAsc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.list(wrapper);
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getConversationId, conversationId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByDesc(Message::getCreateTime)
|
||||
.orderByDesc(Message::getMessageOrder)
|
||||
.last("LIMIT 1");
|
||||
return this.getOne(wrapper);
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getParentMessageId, parentMessageId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByAsc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.list(wrapper);
|
||||
}
|
||||
|
||||
@@ -184,10 +184,36 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
message.setIsRead(0);
|
||||
}
|
||||
|
||||
// 设置消息顺序 - 在同一个会话中递增
|
||||
if (message.getMessageOrder() == null) {
|
||||
Long nextOrder = getNextMessageOrder(message.getConversationId());
|
||||
message.setMessageOrder(nextOrder);
|
||||
}
|
||||
|
||||
this.save(message);
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会话中下一个消息顺序
|
||||
*
|
||||
* @param conversationId 会话ID
|
||||
* @return 下一个消息顺序
|
||||
*/
|
||||
private Long getNextMessageOrder(String conversationId) {
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getConversationId, conversationId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByDesc(Message::getMessageOrder)
|
||||
.last("LIMIT 1");
|
||||
|
||||
Message lastMessage = this.getOne(wrapper);
|
||||
if (lastMessage != null && lastMessage.getMessageOrder() != null) {
|
||||
return lastMessage.getMessageOrder() + 1;
|
||||
}
|
||||
return 1L;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean markAsRead(String messageId) {
|
||||
return updateReadStatus(messageId, 1);
|
||||
@@ -200,7 +226,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
wrapper.eq(Message::getUserId, userId)
|
||||
.between(Message::getCreateTime, startTime, endTime)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByAsc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.list(wrapper);
|
||||
}
|
||||
|
||||
@@ -211,7 +237,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getUserId, userId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByDesc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
return this.page(page, wrapper);
|
||||
}
|
||||
|
||||
@@ -223,7 +249,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
wrapper.eq(Message::getUserId, userId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.like(StringUtils.hasText(keyword), Message::getContent, keyword)
|
||||
.orderByDesc(Message::getCreateTime);
|
||||
.orderByAsc(Message::getMessageOrder);
|
||||
IPage<Message> result = this.page(page, wrapper);
|
||||
return result.getRecords();
|
||||
}
|
||||
@@ -235,7 +261,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
||||
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Message::getUserId, userId)
|
||||
.eq(Message::getIsDeleted, 0)
|
||||
.orderByDesc(Message::getCreateTime);
|
||||
.orderByDesc(Message::getMessageOrder);
|
||||
IPage<Message> result = this.page(page, wrapper);
|
||||
return result.getRecords();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user