package com.ruoyi.sales.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.service.SalesQuotationService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; @RestController @RequestMapping("/sales/quotation") @Slf4j public class SalesQuotationController { @Autowired private SalesQuotationService salesQuotationService; @GetMapping("/list") public AjaxResult getList(Page page, SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.listPage(page, salesQuotationDto)); } @PostMapping("/export") public void export(HttpServletResponse response) { Page page = new Page(-1,-1); SalesQuotationDto afterSalesService = new SalesQuotationDto(); IPage listPage = salesQuotationService.listPage(page, afterSalesService); ExcelUtil util = new ExcelUtil(SalesQuotationDto.class); util.exportExcel(response, listPage.getRecords() , "销售报价"); } @PostMapping("/add") public AjaxResult add(@RequestBody SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.add(salesQuotationDto)); } @PostMapping("/update") @Log(title = "报价更新", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody SalesQuotationDto salesQuotationDto) { return AjaxResult.success(salesQuotationService.edit(salesQuotationDto)); } @DeleteMapping("/delete") public AjaxResult delete(@RequestBody Long id) { return AjaxResult.success(salesQuotationService.delete(id)); } @PostMapping("/downloadTemplate") public void exportTemplate(HttpServletResponse response) { // 1. 模板文件在resources/static下的路径 String templatePath = "static/销售报价导入模板.xlsx"; // 2. 获取模板文件的输入流 try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(templatePath)) { if (inputStream == null) { throw new FileNotFoundException("模板文件不存在:" + templatePath); } // 3. 设置响应头,触发浏览器下载 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("销售报价导入模板.xlsx", "utf-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName); // 4. 将模板文件写入响应输出流 try (OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } outputStream.flush(); } } catch (IOException e) { log.error("导出销售报价模板失败", e); // 若模板文件读取失败,返回错误提示 try { response.getWriter().write("模板导出失败:" + e.getMessage()); } catch (IOException ex) { log.error("响应输出错误", ex); } } } @PostMapping("/import") public AjaxResult importData(@RequestParam("file") MultipartFile file, @RequestParam("approveUserIdsJson") String approveUserIdsJson) { return AjaxResult.success(salesQuotationService.importData(file, approveUserIdsJson)); } }