AiChatServiceImpl.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package jnpf.base.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.unfbx.chatgpt.entity.chat.BaseMessage;
  4. import com.unfbx.chatgpt.entity.chat.Message;
  5. import jnpf.base.UserInfo;
  6. import jnpf.base.entity.AiChatEntity;
  7. import jnpf.base.entity.AiHistoryEntity;
  8. import jnpf.base.mapper.AiChatMapper;
  9. import jnpf.base.model.ai.AiChatVo;
  10. import jnpf.base.model.ai.AiForm;
  11. import jnpf.base.model.ai.AiHisVo;
  12. import jnpf.base.service.AiChatService;
  13. import jnpf.base.service.AiHistoryService;
  14. import jnpf.base.service.SuperServiceImpl;
  15. import jnpf.constant.MsgCode;
  16. import jnpf.service.OpenAiService;
  17. import jnpf.util.*;
  18. import org.apache.commons.collections4.CollectionUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import java.util.List;
  22. /**
  23. * ai会话服务
  24. *
  25. * @author JNPF开发平台组
  26. * @version v5.2.0
  27. * @copyright 引迈信息技术有限公司
  28. * @date 2024/12/2 10:05:25
  29. */
  30. @Service
  31. public class AiChatServiceImpl extends SuperServiceImpl<AiChatMapper, AiChatEntity> implements AiChatService {
  32. @Autowired
  33. private OpenAiService openAiService;
  34. @Autowired
  35. private AiHistoryService aiHistoryService;
  36. @Override
  37. public String send(String keyword) {
  38. if ("JNPF是什么".equals(keyword)) {
  39. return "JNPF 是一款基于 Java 的低代码开发平台,旨在简化企业级应用的开发流程。以下是其核心特点:" +
  40. "1. 低代码开发:\n" +
  41. "提供可视化界面,通过拖拽组件和配置参数快速构建应用,减少代码编写。\n" +
  42. "自动生成前后端代码,提升开发效率。\n" +
  43. "2. 功能丰富:\n" +
  44. "包含表单设计、流程引擎、报表工具等模块,满足企业多样化需求。\n" +
  45. "支持移动端开发,便于创建跨平台应用。\n" +
  46. "3. 灵活扩展:\n" +
  47. "支持二次开发,允许根据需求深度定制。\n" +
  48. "提供丰富的 API 接口,便于与其他系统集成。\n" +
  49. "4. 国产化支持:\n" +
  50. "兼容国产操作系统和数据库,适合国内企业使用。\n" +
  51. "总结:JNPF 通过低代码方式简化开发流程,提供丰富的功能和灵活的扩展性,适合快速构建企业级应用。";
  52. }
  53. if ("JNPF的性能特点".equals(keyword)) {
  54. return "JNPF 作为低代码开发平台,其性能特点主要体现在以下几个方面:\n" +
  55. "1. 高效开发:\n" +
  56. "可视化开发: 通过拖拽组件和配置参数,快速构建应用,减少代码编写。\n" +
  57. "代码生成: 自动生成前后端代码,提升开发效率。\n" +
  58. "模块化设计: 提供丰富的功能模块,避免重复开发。\n" +
  59. "2. 高稳定性:\n" +
  60. "标准化开发: 统一的开发框架和规范,提升代码质量。\n" +
  61. "持续更新: 平台不断更新,提供最新技术支持。\n" +
  62. "3. 高扩展性:\n" +
  63. "支持二次开发: 可根据需求进行深度定制。\n" +
  64. "丰富接口: 提供多种接口,便于与其他系统集成。\n" +
  65. "多环境部署: 支持多种部署方式,适应不同场景。\n" +
  66. "4. 高性能:\n" +
  67. "优化架构: 采用高性能架构,确保应用流畅运行。\n" +
  68. "缓存机制: 内置缓存机制,提升数据访问速度。\n" +
  69. "负载均衡: 支持负载均衡,有效应对高并发。\n" +
  70. "5. 高安全性:\n" +
  71. "权限控制: 提供细粒度的权限管理,保障数据安全。\n" +
  72. "数据加密: 支持数据加密传输和存储。\n" +
  73. "安全审计: 提供操作日志和审计功能,便于追踪问题。\n" +
  74. "总结: JNPF 在开发效率、稳定性、扩展性、性能及安全性方面表现优异,适合快速构建高性能的企业级应用。";
  75. }
  76. if ("JNPF支持哪些数据库".equals(keyword)) {
  77. return "JNPF 作为一款低代码开发平台,支持多种数据库,具体支持的数据库类型可能因版本和配置而异,但通常包括以下几类:\n" +
  78. "1. 关系型数据库 (SQL):\n" +
  79. "MySQL: 开源、流行的关系型数据库。\n" +
  80. "PostgreSQL: 功能强大、开源的关系型数据库。\n" +
  81. "Oracle: 商业级关系型数据库。\n" +
  82. "SQL Server: 微软开发的关系型数据库。\n" +
  83. "达梦数据库 (DM): 国产关系型数据库。\n" +
  84. "人大金仓数据库 (KingbaseES): 国产关系型数据库。\n" +
  85. "2. 非关系型数据库 (NoSQL):\n" +
  86. "Redis: 内存数据库,常用于缓存和消息队列。\n" +
  87. "3. 国产数据库:\n" +
  88. "达梦数据库 (DM)\n" +
  89. "人大金仓数据库 (KingbaseES)\n" +
  90. "总结: JNPF 支持多种数据库,包括主流的关系型数据库、非关系型数据库以及国产数据库,用户可根据需求选择合适的数据库。建议参考官方文档或咨询技术支持以获取最新的数据库支持信息。";
  91. }
  92. if(!AiLimitUtil.tryAcquire(UserProvider.getUser().getUserId())){
  93. return MsgCode.SYS182.get();
  94. }
  95. Message sysMessage = Message.builder().role(BaseMessage.Role.USER).content(keyword).build();
  96. return openAiService.completion(sysMessage);
  97. }
  98. @Override
  99. public List<AiChatVo> historyList() {
  100. //当前用户信息
  101. UserInfo userInfo = UserProvider.getUser();
  102. QueryWrapper<AiChatEntity> queryWrapper = new QueryWrapper();
  103. queryWrapper.lambda().eq(AiChatEntity::getCreatorUserId, userInfo.getUserId());
  104. queryWrapper.lambda().orderByDesc(AiChatEntity::getCreatorTime);
  105. List<AiChatEntity> list = this.list(queryWrapper);
  106. List<AiChatVo> listVo = JsonUtil.getJsonToList(list, AiChatVo.class);
  107. return listVo;
  108. }
  109. @Override
  110. public List<AiHisVo> historyGet(String id) {
  111. QueryWrapper<AiHistoryEntity> queryWrapper = new QueryWrapper();
  112. queryWrapper.lambda().eq(AiHistoryEntity::getChatId, id);
  113. List<AiHistoryEntity> list = aiHistoryService.list(queryWrapper);
  114. List<AiHisVo> listVo = JsonUtil.getJsonToList(list, AiHisVo.class);
  115. return listVo;
  116. }
  117. @Override
  118. public String historySave(AiForm form) {
  119. String chatId = form.getId();
  120. AiChatEntity chatEntity;
  121. if (StringUtil.isNotEmpty(chatId)) {
  122. chatEntity = this.getById(chatId);
  123. } else {
  124. chatEntity = new AiChatEntity();
  125. chatId = RandomUtil.uuId();
  126. chatEntity.setId(chatId);
  127. }
  128. if (StringUtil.isNotEmpty(form.getFullName())) {
  129. chatEntity.setFullName(form.getFullName());
  130. }
  131. this.saveOrUpdate(chatEntity);
  132. List<AiHisVo> data = form.getData();
  133. if (CollectionUtils.isNotEmpty(data)) {
  134. AiHisVo last = data.get(data.size() - 1);
  135. if (StringUtil.isEmpty(last.getId())) {
  136. AiHistoryEntity entity = JsonUtil.getJsonToBean(last, AiHistoryEntity.class);
  137. entity.setId(RandomUtil.uuId());
  138. entity.setChatId(chatId);
  139. aiHistoryService.save(entity);
  140. }
  141. }
  142. return chatId;
  143. }
  144. @Override
  145. public void delete(String id) {
  146. this.removeById(id);
  147. QueryWrapper<AiHistoryEntity> queryWrapper = new QueryWrapper<>();
  148. queryWrapper.lambda().eq(AiHistoryEntity::getChatId, id);
  149. aiHistoryService.remove(queryWrapper);
  150. }
  151. }