From 31858b935e552821ac424bf1d156ec87bba0843f Mon Sep 17 00:00:00 2001 From: haopeng <657407891@qq.com> Date: Thu, 26 Sep 2024 13:29:43 +0800 Subject: [PATCH] BIGTOP-4235: Fix update in SQLBuilder (#79) --- .../bigtop/manager/dao/sql/SQLBuilder.java | 21 +++++++++++++------ .../service/impl/ChatbotServiceImpl.java | 15 ++++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java index 4321f223..4b56c73d 100644 --- a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java +++ b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java @@ -219,6 +219,9 @@ public static String update( } Field field = ReflectionUtils.findField(entityClass, entry.getKey()); if (field != null) { + if (checkBaseField(field)) { + continue; + } Column column = field.getAnnotation(Column.class); if (column != null && !column.nullable() && value == null) { continue; @@ -248,6 +251,9 @@ public static String update( } Field field = ReflectionUtils.findField(entityClass, entry.getKey()); if (field != null) { + if (checkBaseField(field)) { + continue; + } Column column = field.getAnnotation(Column.class); if (column != null && !column.nullable() && value == null) { continue; @@ -291,7 +297,10 @@ public static String updateList( primaryKey = keywordsFormat(entry.getValue(), DBType.MYSQL); continue; } - + Field field = ReflectionUtils.findField(entityClass, entry.getKey()); + if (field == null || checkBaseField(field)) { + continue; + } StringBuilder caseClause = new StringBuilder(); caseClause .append(keywordsFormat(entry.getValue(), DBType.MYSQL)) @@ -301,10 +310,6 @@ public static String updateList( if (ps == null || ps.getReadMethod() == null) { continue; } - Field field = ReflectionUtils.findField(entityClass, entry.getKey()); - if (field == null || checkBaseField(field)) { - continue; - } Object value = ReflectionUtils.invokeMethod(ps.getReadMethod(), entity); PropertyDescriptor pkPs = BeanUtils.getPropertyDescriptor(entityClass, tableMetaData.getPkProperty()); @@ -335,8 +340,12 @@ public static String updateList( .append("' THEN NULL "); } } + if (caseClause.toString().endsWith("CASE ")) { + caseClause.append("WHEN TRUE THEN "); + } else { + caseClause.append("ELSE "); + } caseClause - .append("ELSE ") .append(keywordsFormat(entry.getValue(), DBType.MYSQL)) .append(" "); caseClause.append("END"); diff --git a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java index 7148ee32..0c49abcd 100644 --- a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java +++ b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java @@ -81,7 +81,7 @@ public class ChatbotServiceImpl implements ChatbotService { private AIAssistantFactory aiAssistantFactory; - public AIAssistantFactory getAiAssistantFactory() { + public AIAssistantFactory getAIAssistantFactory() { if (aiAssistantFactory == null) { aiAssistantFactory = new GeneralAssistantFactory(new PersistentChatMemoryStore(chatThreadDao, chatMessageDao)); @@ -105,7 +105,7 @@ private PlatformType getPlatformType(String platformName) { private AIAssistant buildAIAssistant( PlatformAuthorizedDTO platformAuthorizedDTO, Long threadId, Map configs) { - return getAiAssistantFactory() + return getAIAssistantFactory() .create( getPlatformType(platformAuthorizedDTO.getPlatformName()), getAIAssistantConfig(platformAuthorizedDTO, configs), @@ -113,7 +113,7 @@ private AIAssistant buildAIAssistant( } private Boolean testAuthorization(PlatformAuthorizedDTO platformAuthorizedDTO) { - AIAssistant aiAssistant = getAiAssistantFactory() + AIAssistant aiAssistant = getAIAssistantFactory() .create( getPlatformType(platformAuthorizedDTO.getPlatformName()), getAIAssistantConfig(platformAuthorizedDTO, null)); @@ -215,10 +215,16 @@ public boolean deleteAuthorizedPlatform(Long platformId) { authorizedPlatformPO.setIsDeleted(true); platformAuthorizedDao.partialUpdateById(authorizedPlatformPO); List chatThreadPOS = chatThreadDao.findAllByPlatformId(authorizedPlatformPO.getId()); + if (chatThreadPOS.isEmpty()) { + return true; + } chatThreadPOS.forEach(chatThread -> chatThread.setIsDeleted(true)); chatThreadDao.partialUpdateByIds(chatThreadPOS); for (ChatThreadPO chatThreadPO : chatThreadPOS) { List chatMessagePOS = chatMessageDao.findAllByThreadId(chatThreadPO.getId()); + if (chatMessagePOS.isEmpty()) { + return true; + } chatMessagePOS.forEach(chatMessage -> chatMessage.setIsDeleted(true)); chatMessageDao.partialUpdateByIds(chatMessagePOS); } @@ -265,6 +271,9 @@ public boolean deleteChatThreads(Long platformId, Long threadId) { chatThreadPO.setIsDeleted(true); chatThreadDao.partialUpdateById(chatThreadPO); List chatMessagePOS = chatMessageDao.findAllByThreadId(threadId); + if (chatMessagePOS.isEmpty()) { + return true; + } chatMessagePOS.forEach(chatMessage -> chatMessage.setIsDeleted(true)); chatMessageDao.partialUpdateByIds(chatMessagePOS); return true;