12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package space.anyi.BI.service.impl;
- import cn.hutool.core.util.IdUtil;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.web.multipart.MultipartFile;
- import space.anyi.BI.BIApplication;
- import space.anyi.BI.entity.Chart;
- import space.anyi.BI.entity.dto.ChartDTO;
- import space.anyi.BI.entity.vo.ChartVO;
- import space.anyi.BI.entity.xinghuo.HttpRequestData;
- import space.anyi.BI.entity.xinghuo.HttpResponseData;
- import space.anyi.BI.exception.SystemException;
- import space.anyi.BI.service.ChartService;
- import space.anyi.BI.mapper.ChartMapper;
- import org.springframework.stereotype.Service;
- import space.anyi.BI.util.AiUtil;
- import space.anyi.BI.util.BeanCopyUtil;
- import space.anyi.BI.util.ExcelUtils;
- import space.anyi.BI.util.SecurityUtils;
- import java.io.IOException;
- /**
- * @author 杨逸
- * @description 针对表【chart(图标表)】的数据库操作Service实现
- * @createDate 2024-11-28 19:51:56
- */
- @Service
- public class ChartServiceImpl extends ServiceImpl<ChartMapper, Chart>
- implements ChartService{
- private final static Logger log = LoggerFactory.getLogger(ChartServiceImpl.class);
- @Override
- public ChartVO generateChartByAI(ChartDTO chartDTO, MultipartFile file) {
- //读数据
- String csvData = "";
- try {
- csvData = ExcelUtils.excel2csv(file.getInputStream());
- log.info("上传的数据为:\n{}", csvData);
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (csvData.length()>3000){
- throw new SystemException(500, "数据量过大,请上传小于3000行的数据");
- }
- StringBuilder message = new StringBuilder("原始数据:\n");
- message.append(csvData);
- message.append("分析目标:\n");
- message.append(chartDTO.getAnalysisTarget());
- message.append("\n.使用").append(chartDTO.getChartType()).append("进行可视化分析.\n");
- //配置prompt向AI发送请求
- HttpRequestData requestData = AiUtil.createDefaultRequestData(message.toString());
- HttpResponseData responseData = AiUtil.doChat(requestData);
- //解析AI返回的数据
- ChartVO chartVO = BeanCopyUtil.copyBean(chartDTO, ChartVO.class);
- String content = responseData.getChoices().get(0).getMessage().getContent();
- log.info("AI返回的数据为:{}", content);
- int index = content.indexOf("```");
- int endIndex = content.lastIndexOf("```");
- if (index == -1 || endIndex == -1){
- throw new SystemException(500, "AI生成图表失败");
- }
- //数据可视化,Echarts的option代码
- chartVO.setGeneratedChartData(content.substring(index+7, endIndex).trim());
- index = endIndex;
- //分析结论
- chartVO.setAnalysisConclusion(content.substring(index+3).trim());
- Chart chart = BeanCopyUtil.copyBean(chartVO, Chart.class);
- chart.setUserId(SecurityUtils.getUserId());
- chart.setChartData(csvData);
- chart.setId(IdUtil.getSnowflake(1,1).nextId());
- //保存到数据库
- save(chart);
- return chartVO;
- }
- }
|