| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- package jnpf.base.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.unfbx.chatgpt.entity.chat.BaseMessage;
- import com.unfbx.chatgpt.entity.chat.Message;
- import jnpf.base.UserInfo;
- import jnpf.base.entity.AiChatEntity;
- import jnpf.base.entity.AiHistoryEntity;
- import jnpf.base.mapper.AiChatMapper;
- import jnpf.base.model.ai.AiChatVo;
- import jnpf.base.model.ai.AiForm;
- import jnpf.base.model.ai.AiHisVo;
- import jnpf.base.service.AiChatService;
- import jnpf.base.service.AiHistoryService;
- import jnpf.base.service.SuperServiceImpl;
- import jnpf.constant.MsgCode;
- import jnpf.service.OpenAiService;
- import jnpf.util.*;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- /**
- * ai会话服务
- *
- * @author JNPF开发平台组
- * @version v5.2.0
- * @copyright 引迈信息技术有限公司
- * @date 2024/12/2 10:05:25
- */
- @Service
- public class AiChatServiceImpl extends SuperServiceImpl<AiChatMapper, AiChatEntity> implements AiChatService {
- @Autowired
- private OpenAiService openAiService;
- @Autowired
- private AiHistoryService aiHistoryService;
- @Override
- public String send(String keyword) {
- if ("JNPF是什么".equals(keyword)) {
- return "JNPF 是一款基于 Java 的低代码开发平台,旨在简化企业级应用的开发流程。以下是其核心特点:" +
- "1. 低代码开发:\n" +
- "提供可视化界面,通过拖拽组件和配置参数快速构建应用,减少代码编写。\n" +
- "自动生成前后端代码,提升开发效率。\n" +
- "2. 功能丰富:\n" +
- "包含表单设计、流程引擎、报表工具等模块,满足企业多样化需求。\n" +
- "支持移动端开发,便于创建跨平台应用。\n" +
- "3. 灵活扩展:\n" +
- "支持二次开发,允许根据需求深度定制。\n" +
- "提供丰富的 API 接口,便于与其他系统集成。\n" +
- "4. 国产化支持:\n" +
- "兼容国产操作系统和数据库,适合国内企业使用。\n" +
- "总结:JNPF 通过低代码方式简化开发流程,提供丰富的功能和灵活的扩展性,适合快速构建企业级应用。";
- }
- if ("JNPF的性能特点".equals(keyword)) {
- return "JNPF 作为低代码开发平台,其性能特点主要体现在以下几个方面:\n" +
- "1. 高效开发:\n" +
- "可视化开发: 通过拖拽组件和配置参数,快速构建应用,减少代码编写。\n" +
- "代码生成: 自动生成前后端代码,提升开发效率。\n" +
- "模块化设计: 提供丰富的功能模块,避免重复开发。\n" +
- "2. 高稳定性:\n" +
- "标准化开发: 统一的开发框架和规范,提升代码质量。\n" +
- "持续更新: 平台不断更新,提供最新技术支持。\n" +
- "3. 高扩展性:\n" +
- "支持二次开发: 可根据需求进行深度定制。\n" +
- "丰富接口: 提供多种接口,便于与其他系统集成。\n" +
- "多环境部署: 支持多种部署方式,适应不同场景。\n" +
- "4. 高性能:\n" +
- "优化架构: 采用高性能架构,确保应用流畅运行。\n" +
- "缓存机制: 内置缓存机制,提升数据访问速度。\n" +
- "负载均衡: 支持负载均衡,有效应对高并发。\n" +
- "5. 高安全性:\n" +
- "权限控制: 提供细粒度的权限管理,保障数据安全。\n" +
- "数据加密: 支持数据加密传输和存储。\n" +
- "安全审计: 提供操作日志和审计功能,便于追踪问题。\n" +
- "总结: JNPF 在开发效率、稳定性、扩展性、性能及安全性方面表现优异,适合快速构建高性能的企业级应用。";
- }
- if ("JNPF支持哪些数据库".equals(keyword)) {
- return "JNPF 作为一款低代码开发平台,支持多种数据库,具体支持的数据库类型可能因版本和配置而异,但通常包括以下几类:\n" +
- "1. 关系型数据库 (SQL):\n" +
- "MySQL: 开源、流行的关系型数据库。\n" +
- "PostgreSQL: 功能强大、开源的关系型数据库。\n" +
- "Oracle: 商业级关系型数据库。\n" +
- "SQL Server: 微软开发的关系型数据库。\n" +
- "达梦数据库 (DM): 国产关系型数据库。\n" +
- "人大金仓数据库 (KingbaseES): 国产关系型数据库。\n" +
- "2. 非关系型数据库 (NoSQL):\n" +
- "Redis: 内存数据库,常用于缓存和消息队列。\n" +
- "3. 国产数据库:\n" +
- "达梦数据库 (DM)\n" +
- "人大金仓数据库 (KingbaseES)\n" +
- "总结: JNPF 支持多种数据库,包括主流的关系型数据库、非关系型数据库以及国产数据库,用户可根据需求选择合适的数据库。建议参考官方文档或咨询技术支持以获取最新的数据库支持信息。";
- }
- if(!AiLimitUtil.tryAcquire(UserProvider.getUser().getUserId())){
- return MsgCode.SYS182.get();
- }
- Message sysMessage = Message.builder().role(BaseMessage.Role.USER).content(keyword).build();
- return openAiService.completion(sysMessage);
- }
- @Override
- public List<AiChatVo> historyList() {
- //当前用户信息
- UserInfo userInfo = UserProvider.getUser();
- QueryWrapper<AiChatEntity> queryWrapper = new QueryWrapper();
- queryWrapper.lambda().eq(AiChatEntity::getCreatorUserId, userInfo.getUserId());
- queryWrapper.lambda().orderByDesc(AiChatEntity::getCreatorTime);
- List<AiChatEntity> list = this.list(queryWrapper);
- List<AiChatVo> listVo = JsonUtil.getJsonToList(list, AiChatVo.class);
- return listVo;
- }
- @Override
- public List<AiHisVo> historyGet(String id) {
- QueryWrapper<AiHistoryEntity> queryWrapper = new QueryWrapper();
- queryWrapper.lambda().eq(AiHistoryEntity::getChatId, id);
- List<AiHistoryEntity> list = aiHistoryService.list(queryWrapper);
- List<AiHisVo> listVo = JsonUtil.getJsonToList(list, AiHisVo.class);
- return listVo;
- }
- @Override
- public String historySave(AiForm form) {
- String chatId = form.getId();
- AiChatEntity chatEntity;
- if (StringUtil.isNotEmpty(chatId)) {
- chatEntity = this.getById(chatId);
- } else {
- chatEntity = new AiChatEntity();
- chatId = RandomUtil.uuId();
- chatEntity.setId(chatId);
- }
- if (StringUtil.isNotEmpty(form.getFullName())) {
- chatEntity.setFullName(form.getFullName());
- }
- this.saveOrUpdate(chatEntity);
- List<AiHisVo> data = form.getData();
- if (CollectionUtils.isNotEmpty(data)) {
- AiHisVo last = data.get(data.size() - 1);
- if (StringUtil.isEmpty(last.getId())) {
- AiHistoryEntity entity = JsonUtil.getJsonToBean(last, AiHistoryEntity.class);
- entity.setId(RandomUtil.uuId());
- entity.setChatId(chatId);
- aiHistoryService.save(entity);
- }
- }
- return chatId;
- }
- @Override
- public void delete(String id) {
- this.removeById(id);
- QueryWrapper<AiHistoryEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(AiHistoryEntity::getChatId, id);
- aiHistoryService.remove(queryWrapper);
- }
- }
|