From 202ce057fd038abff68d3de5f65e7de2699360cb Mon Sep 17 00:00:00 2001 From: chenhao Date: Tue, 30 Jun 2026 17:27:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=BB=E8=BE=91=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=A8=A1=E6=9D=BF=E7=8A=B6=E6=80=81=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E5=92=8C=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/impl/PromptTemplateServiceImpl.java | 29 +++++-- .../impl/PromptTemplateServiceImplTest.java | 76 +++++++++++++++++++ 2 files changed, 100 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java index 80b1a7a..e1738cb 100644 --- a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java @@ -79,7 +79,7 @@ public class PromptTemplateServiceImpl extends ServiceImpl hotWordGroupMap = queryHotWordGroupMap(records.stream().map(PromptTemplate::getHotWordGroupId).toList()); List vos = records.stream() - .map(template -> toVO(template, effectiveStatus(template.getStatus(), userStatusMap.get(template.getId())), hotWordGroupMap)) + .map(template -> toVO(template, effectiveStatus(template.getIsSystem(), template.getStatus(), userStatusMap.get(template.getId())), hotWordGroupMap)) .collect(Collectors.toList()); PageResult> result = new PageResult<>(); @@ -111,6 +111,9 @@ public class PromptTemplateServiceImpl extends ServiceImpl() .eq(PromptTemplateUserConfig::getTenantId, tenantId) @@ -139,6 +142,9 @@ public class PromptTemplateServiceImpl extends ServiceImpl() .eq(PromptTemplateUserConfig::getTenantId, tenantId) @@ -146,7 +152,7 @@ public class PromptTemplateServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.and(w -> w .eq(PromptTemplate::getCreatorId, userId) - .or(sw -> sw.eq(PromptTemplate::getTenantId, 0L).eq(PromptTemplate::getIsSystem, 1)) - .or(sw -> sw.eq(PromptTemplate::getTenantId, tenantId).eq(PromptTemplate::getIsSystem, 1)) + .or(sw -> { + sw.eq(PromptTemplate::getTenantId, 0L).eq(PromptTemplate::getIsSystem, 1); + if (!Boolean.TRUE.equals(isPlatformAdmin)) { + sw.eq(PromptTemplate::getStatus, 1); + } + }) + .or(sw -> { + sw.eq(PromptTemplate::getTenantId, tenantId).eq(PromptTemplate::getIsSystem, 1); + if (!Boolean.TRUE.equals(isPlatformAdmin) && !Boolean.TRUE.equals(isTenantAdmin)) { + sw.eq(PromptTemplate::getStatus, 1); + } + }) ); return wrapper; } @@ -222,7 +238,10 @@ public class PromptTemplateServiceImpl extends ServiceImpl page = new Page<>(1, 10); + page.setRecords(List.of()); + page.setTotal(0); + + doReturn(page).when(service).page(any(Page.class), any(LambdaQueryWrapper.class)); + when(userConfigMapper.selectList(any())).thenReturn(List.of()); + + assertEquals(0, service.pageTemplates(1, 10, null, null, 9L, 7L, false, false).getRecords().size()); + } + + @Test + void updateUserTemplateStatusShouldRejectDisabledSystemTemplate() { + PromptTemplateUserConfigMapper userConfigMapper = mock(PromptTemplateUserConfigMapper.class); + HotWordGroupMapper hotWordGroupMapper = mock(HotWordGroupMapper.class); + HotWordService hotWordService = mock(HotWordService.class); + PromptTemplateServiceImpl service = spy(new PromptTemplateServiceImpl(userConfigMapper, hotWordGroupMapper, hotWordService)); + + PromptTemplate template = new PromptTemplate(); + template.setId(51L); + template.setTenantId(0L); + template.setCreatorId(1L); + template.setIsSystem(1); + template.setStatus(0); + + doReturn(template).when(service).getOne(any(LambdaQueryWrapper.class)); + + boolean result = service.updateUserTemplateStatus(51L, 1, 9L, 7L, true, false); + + assertFalse(result); + verify(userConfigMapper, never()).selectOne(any()); + verify(userConfigMapper, never()).insert(any(PromptTemplateUserConfig.class)); + } + + @Test + void isTemplateEnabledForUserShouldRespectSystemStatusFirst() { + PromptTemplateUserConfigMapper userConfigMapper = mock(PromptTemplateUserConfigMapper.class); + HotWordGroupMapper hotWordGroupMapper = mock(HotWordGroupMapper.class); + HotWordService hotWordService = mock(HotWordService.class); + PromptTemplateServiceImpl service = spy(new PromptTemplateServiceImpl(userConfigMapper, hotWordGroupMapper, hotWordService)); + + PromptTemplate template = new PromptTemplate(); + template.setId(61L); + template.setTenantId(9L); + template.setCreatorId(1L); + template.setIsSystem(1); + template.setStatus(0); + + doReturn(template).when(service).getOne(any(LambdaQueryWrapper.class)); + + boolean result = service.isTemplateEnabledForUser(61L, 9L, 7L, false, true); + + assertFalse(result); + verify(userConfigMapper, never()).selectOne(any()); + } }