package space.anyi.BI.controller; import cn.hutool.core.util.IdUtil; import cn.hutool.poi.excel.ExcelUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import space.anyi.BI.BIApplication; import space.anyi.BI.entity.Chart; import space.anyi.BI.entity.ResponseResult; import space.anyi.BI.entity.dto.ChartDTO; import space.anyi.BI.entity.vo.ChartVO; import space.anyi.BI.entity.vo.PageVO; import space.anyi.BI.service.ChartService; import space.anyi.BI.util.BeanCopyUtil; import space.anyi.BI.util.SecurityUtils; import javax.annotation.Resource; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @ProjectName: BI * @FileName: ChartController * @Author: 杨逸 * @Data:2024/11/28 19:53 * @Description: */ @Controller() @RequestMapping("/chart") public class ChartController { private final static Logger log = LoggerFactory.getLogger(ChartController.class); @Resource private ChartService chartService; @GetMapping("/getChartById/{id}") @ResponseBody public ResponseResult getChartById(@PathVariable("id") Long id){ Chart chart = chartService.getById(id); return ResponseResult.okResult(chart); } @PostMapping("/add") @ResponseBody public ResponseResult addChart(@RequestBody Chart chart){ long id = IdUtil.getSnowflake(1, 1).nextId(); chart.setId(id); Long userId = SecurityUtils.getUserId(); chart.setUserId(userId); chartService.save(chart); return ResponseResult.okResult(); } @DeleteMapping("/{ids}") @ResponseBody public ResponseResult deleteChartById(@PathVariable List ids){ chartService.removeByIds(ids); return ResponseResult.okResult(); } @PutMapping("/update") @ResponseBody public ResponseResult updateChart(@RequestBody Chart chart){ chartService.updateById(chart); return ResponseResult.okResult(); } @GetMapping("/list") @ResponseBody public ResponseResult page(Integer pageNum,Integer pageSize){ Page page = chartService.page(new Page(pageNum, pageSize)); List voList = new ArrayList<>(); for (Chart chart : page.getRecords()) { ChartVO chartVO = BeanCopyUtil.copyBean(chart, ChartVO.class); chartVO.setId(chart.getId().toString()); chartVO.setUserId(chart.getUserId().toString()); voList.add(chartVO); } PageVO pageVO = new PageVO(voList, page.getTotal()); return ResponseResult.okResult(pageVO); } @PostMapping("/generateChartByAI") @ResponseBody public ResponseResult generateChartByAI(ChartDTO chartDTO, MultipartFile file) throws IOException { log.info("分析目标:{}图标名称:{}",chartDTO.getAnalysisTarget(),chartDTO.getName()); if (file == null || file.isEmpty()) { return ResponseResult.errorResult(ResponseResult.AppHttpCodeEnum.FILE_NOT_NULL); } //文件类判断 if (!file.getContentType().equals("application/vnd.ms-excel") && !file.getContentType().equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { return ResponseResult.errorResult(ResponseResult.AppHttpCodeEnum.FILE_TYPE_ERROR); } ChartVO vo = chartService.generateChartByAI(chartDTO,file); return ResponseResult.okResult(vo); } @ExceptionHandler({IOException.class}) private ResponseResult exceptionHandler(){ return ResponseResult.errorResult(ResponseResult.AppHttpCodeEnum.FILE_ERROR); } }