diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java index 91c9932f..054ed81a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java @@ -32,7 +32,8 @@ public class DashScopeChat { private final ChatClient chatClient; - private static final String DEFAULT_PROMPT = "你叫煤球,是一个博学的智能聊天助手,请根据用户提问回答!"; + private static final String DEFAULT_PROMPT = + "你是一名智能助手,代号为“煤球”。回答时不要提及自身身份或角色设定,除非用户主动询问;请直接提供清晰、准确、专业的回答。"; private static final String DEFAULT_FILE_DIR = System.getProperty("user.dir") + "/chat-memory"; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/service/impl/AIChatMemoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/service/impl/AIChatMemoryServiceImpl.java index 577aa700..d842e50d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/service/impl/AIChatMemoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/service/impl/AIChatMemoryServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.dromara.ai.domain.AIChatMemory; import org.dromara.ai.domain.dto.AIChatMemoryQueryReq; import org.dromara.ai.domain.dto.AIChatMemoryUpdateReq; @@ -13,11 +14,15 @@ import org.dromara.ai.service.IAIChatMemoryService; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.file.FileUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -27,6 +32,7 @@ import java.util.List; * @author lilemy * @date 2025-11-04 */ +@Slf4j @Service public class AIChatMemoryServiceImpl extends ServiceImpl implements IAIChatMemoryService { @@ -103,9 +109,42 @@ public class AIChatMemoryServiceImpl extends ServiceImpl ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + List aiChatMemories = this.listByIds(ids); + if (aiChatMemories.size() != ids.size()) { + throw new ServiceException("数据不存在"); } - return baseMapper.deleteByIds(ids) > 0; + // 暂存文件路径 + List filesToDelete = new ArrayList<>(); + for (AIChatMemory mem : aiChatMemories) { + if (StringUtils.isNotBlank(mem.getFileName())) { + File file = new File(System.getProperty("user.dir") + + "/chat-memory/", mem.getFileName()); + + try { + // 防止目录穿越 + if (file.getCanonicalPath().startsWith( + new File(System.getProperty("user.dir") + "/chat-memory").getCanonicalPath())) { + filesToDelete.add(file); + } else { + log.warn("危险的 filename 路径被拒绝删除: {}", mem.getFileName()); + } + } catch (IOException e) { + log.warn("filename 获取失败: {}", mem.getFileName()); + throw new ServiceException("文件获取失败: " + mem.getFileName()); + } + } + } + // 删除数据库 + boolean b = baseMapper.deleteByIds(ids) > 0; + if (!b) { + throw new ServiceException("数据库删除失败"); + } + // 删除文件(非事务,不影响数据库逻辑) + for (File f : filesToDelete) { + if (f.exists() && !FileUtils.del(f)) { + log.warn("文件删除失败: {}", f.getAbsolutePath()); + } + } + return true; } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/BusWjzxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/BusWjzxServiceImpl.java index 1c7c9b3c..0e70fa93 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/BusWjzxServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/BusWjzxServiceImpl.java @@ -1,34 +1,33 @@ package org.dromara.bigscreen.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.bigscreen.domain.BusWjzx; import org.dromara.bigscreen.domain.dto.BusWjzxBo; import org.dromara.bigscreen.domain.vo.BusWjzxSjDateVo; +import org.dromara.bigscreen.domain.vo.BusWjzxVo; +import org.dromara.bigscreen.mapper.BusWjzxMapper; +import org.dromara.bigscreen.service.IBusWjzxService; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.service.impl.SysOssServiceImpl; -import org.dromara.xzd.biddingManagement.biddingDocument.domain.XzdBiddingFileEstimate; -import org.dromara.xzd.biddingManagement.biddingDocument.domain.vo.XzdBiddingFileEstimateVo; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import org.dromara.bigscreen.domain.vo.BusWjzxVo; -import org.dromara.bigscreen.domain.BusWjzx; -import org.dromara.bigscreen.mapper.BusWjzxMapper; -import org.dromara.bigscreen.service.IBusWjzxService; import java.time.LocalDate; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; /** * 文件中心Service业务层处理 @@ -53,7 +52,7 @@ public class BusWjzxServiceImpl extends ServiceImpl impl * @return 文件中心 */ @Override - public BusWjzxVo queryById(Long id){ + public BusWjzxVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -98,8 +97,7 @@ public class BusWjzxServiceImpl extends ServiceImpl impl Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(BusWjzx::getId); - lqw.eq(StringUtils.isNotBlank(bo.getWjm()), BusWjzx::getWjm, bo.getWjm()); - + lqw.like(StringUtils.isNotBlank(bo.getWjm()), BusWjzx::getWjm, bo.getWjm()); lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), BusWjzx::getAuditStatus, bo.getAuditStatus()); lqw.eq(bo.getCreateBy() != null, BusWjzx::getCreateBy, bo.getCreateBy()); return lqw; @@ -115,7 +113,7 @@ public class BusWjzxServiceImpl extends ServiceImpl impl public Boolean insertByBo(BusWjzxBo bo) { BusWjzx add = MapstructUtils.convert(bo, BusWjzx.class); validEntityBeforeSave(add); - if (add != null && StringUtils.isNotBlank(add.getWjm())){ + if (add != null && StringUtils.isNotBlank(add.getWjm())) { String[] split = add.getWjm().split("\\."); add.setWjlx(split[split.length - 1]); } @@ -142,7 +140,7 @@ public class BusWjzxServiceImpl extends ServiceImpl impl /** * 保存前的数据校验 */ - private void validEntityBeforeSave(BusWjzx entity){ + private void validEntityBeforeSave(BusWjzx entity) { //TODO 做一些数据校验,如唯一约束 } @@ -155,7 +153,7 @@ public class BusWjzxServiceImpl extends ServiceImpl impl */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } ArrayList temp = new ArrayList<>();