From a187fe464be5646bc2a5960055661bc1d4f7b7b9 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Wed, 19 Nov 2025 13:12:53 +0800 Subject: [PATCH] =?UTF-8?q?2025-11-19=20=E6=96=B0=E5=A2=9E=E3=80=90?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E6=98=8E=E7=BB=86=E6=9F=A5=E8=AF=A2=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E3=80=91=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QuoteDetailController.java | 20 +++ .../quote/mapper/QuoteDetailMapper.java | 5 + .../quote/service/QuoteDetailService.java | 7 + .../service/impl/QuoteDetailServiceImpl.java | 30 ++++ .../modules/quote/vo/QuoteDetailReportVo.java | 121 ++++++++++++++ .../mapper/quote/QuoteDetailMapper.xml | 156 ++++++++++++++++++ 6 files changed, 339 insertions(+) create mode 100644 src/main/java/com/spring/modules/quote/vo/QuoteDetailReportVo.java diff --git a/src/main/java/com/spring/modules/quote/controller/QuoteDetailController.java b/src/main/java/com/spring/modules/quote/controller/QuoteDetailController.java index 7738b887..43a1fac8 100644 --- a/src/main/java/com/spring/modules/quote/controller/QuoteDetailController.java +++ b/src/main/java/com/spring/modules/quote/controller/QuoteDetailController.java @@ -1,12 +1,15 @@ package com.spring.modules.quote.controller; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.spring.common.utils.PageUtils; import com.spring.common.utils.R; import com.spring.modules.quote.entity.QuoteDetail; import com.spring.modules.quote.service.QuoteDetailService; +import com.spring.modules.quote.vo.QuoteDetailReportVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -73,4 +76,21 @@ public class QuoteDetailController { quoteDetailService.updateShowFlag(quoteDetail.getId(), quoteDetail.getShowFlag()); return R.ok("操作成功"); } + + /** + * 报价明细查询报表 + */ + @PostMapping("/report") + public R queryQuoteDetailReport(@RequestBody QuoteDetailReportVo vo){ + PageUtils page = quoteDetailService.queryQuoteDetailReport(vo); + return R.ok().put("page", page); + } + + /** + * 导出报价明细查询报表 + */ + @PostMapping("/report/export") + public void exportQuoteDetailReport(@RequestBody QuoteDetailReportVo vo, HttpServletResponse response){ + quoteDetailService.exportQuoteDetailReport(vo, response); + } } diff --git a/src/main/java/com/spring/modules/quote/mapper/QuoteDetailMapper.java b/src/main/java/com/spring/modules/quote/mapper/QuoteDetailMapper.java index f4de419e..3bc8c31f 100644 --- a/src/main/java/com/spring/modules/quote/mapper/QuoteDetailMapper.java +++ b/src/main/java/com/spring/modules/quote/mapper/QuoteDetailMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.spring.modules.part.entity.PartInformationEntity; import com.spring.modules.quote.entity.QuoteDetail; +import com.spring.modules.quote.vo.QuoteDetailReportVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -21,4 +22,8 @@ public interface QuoteDetailMapper extends BaseMapper { List queryQuoteDetailByInquiry(QuoteDetail quoteDetail); int updateShowFlag(@Param("id") Long id, @Param("showFlag") String showFlag); + + IPage queryQuoteDetailReport(Page page, @Param("query") QuoteDetailReportVo vo); + + List queryQuoteDetailReportList(@Param("query") QuoteDetailReportVo vo); } diff --git a/src/main/java/com/spring/modules/quote/service/QuoteDetailService.java b/src/main/java/com/spring/modules/quote/service/QuoteDetailService.java index 9387f857..8acdcfcf 100644 --- a/src/main/java/com/spring/modules/quote/service/QuoteDetailService.java +++ b/src/main/java/com/spring/modules/quote/service/QuoteDetailService.java @@ -2,10 +2,13 @@ package com.spring.modules.quote.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.spring.common.utils.PageUtils; import com.spring.modules.quote.entity.Quote; import com.spring.modules.quote.entity.QuoteDetail; import com.spring.modules.quote.entity.QuoteGroupDetail; +import com.spring.modules.quote.vo.QuoteDetailReportVo; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -34,4 +37,8 @@ public interface QuoteDetailService extends IService { List queryQuoteDetailByInquiry(QuoteDetail quoteDetail); void updateShowFlag(Long id, String showFlag); + + PageUtils queryQuoteDetailReport(QuoteDetailReportVo vo); + + void exportQuoteDetailReport(QuoteDetailReportVo vo, HttpServletResponse response); } diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java index e8ad4415..48bc7f7d 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java @@ -1,10 +1,12 @@ package com.spring.modules.quote.service.impl; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.spring.common.exception.XJException; +import com.spring.common.utils.PageUtils; import com.spring.modules.oss.entity.SysOssEntity; import com.spring.modules.oss.service.SysOssService; import com.spring.modules.part.entity.PartInformationEntity; @@ -12,12 +14,14 @@ import com.spring.modules.quote.entity.*; import com.spring.modules.quote.mapper.QuoteDetailMapper; import com.spring.modules.quote.mapper.QuoteGroupDetailMapper; import com.spring.modules.quote.service.*; +import com.spring.modules.quote.vo.QuoteDetailReportVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; @@ -737,4 +741,30 @@ public class QuoteDetailServiceImpl extends ServiceImpl page = baseMapper.queryQuoteDetailReport( + new Page<>(vo.getPage(), vo.getLimit()), vo + ); + return new PageUtils(page); + } + + @Override + public void exportQuoteDetailReport(QuoteDetailReportVo vo, HttpServletResponse response) { + List list = baseMapper.queryQuoteDetailReportList(vo); + + try { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = java.net.URLEncoder.encode("报价明细查询", "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream(), QuoteDetailReportVo.class) + .sheet("报价明细") + .doWrite(list); + } catch (Exception e) { + throw new RuntimeException("导出失败", e); + } + } } diff --git a/src/main/java/com/spring/modules/quote/vo/QuoteDetailReportVo.java b/src/main/java/com/spring/modules/quote/vo/QuoteDetailReportVo.java new file mode 100644 index 00000000..f915e6a0 --- /dev/null +++ b/src/main/java/com/spring/modules/quote/vo/QuoteDetailReportVo.java @@ -0,0 +1,121 @@ +package com.spring.modules.quote.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class QuoteDetailReportVo { + @ExcelProperty("Site") + private String site; + + @ExcelProperty("BU") + private String buNo; + + @ExcelProperty("报价单号") + private String quoteVersionNo; + + @ExcelProperty("客户编码") + private String customerNo; + + @ExcelProperty("客户名称") + private String customerDesc; + + @ExcelProperty("项目号") + private String projectNo; + + @ExcelProperty("项目名称") + private String projectDesc; + + @ExcelProperty("状态") + private String status; + + @ExcelProperty("PLM物料编码") + private String plmPartNo; + + @ExcelProperty("IFS物料编码") + private String ifsPartNo; + + @ExcelProperty("物料名称") + private String partDesc; + + @ExcelProperty("MOQ") + private BigDecimal qty; + + @ExcelProperty("材料成本") + private BigDecimal adjustPartCost; + + @ExcelProperty("人工成本") + private BigDecimal adjustLabourCost; + + @ExcelProperty("机器成本") + private BigDecimal adjustMachineCost; + + @ExcelProperty("工具成本") + private BigDecimal adjustToolCost; + + @ExcelProperty("测试成本") + private BigDecimal adjustTestCost; + + @ExcelProperty("包装成本") + private BigDecimal packCost; + + @ExcelProperty("运输成本") + private BigDecimal shippingCost; + + @ExcelProperty("其他成本") + private BigDecimal adjustElseCost; + + @ExcelProperty("总成本") + private BigDecimal totalCost; + + @ExcelProperty("最终交易价") + private BigDecimal finalTransactionPrice; + + @ExcelProperty("VA%") + private BigDecimal quoteProfitRate; + + @ExcelProperty("Contribution%") + private BigDecimal quoteProfitAmount; + + @ExcelProperty("Margin%") + private BigDecimal quoteTaxRate; + + @ExcelProperty("Price ¥(ex VAT)") + private BigDecimal quoteTaxTotalPrice; + + @ExcelProperty("未税单价") + private BigDecimal unitPrice; + + @ExcelProperty("税率") + private BigDecimal taxRate; + + @ExcelProperty("含税单价(CNY)") + private BigDecimal taxUnitPrice; + + // 查询条件参数(不显示在Excel中) + @ExcelIgnore + private String quoter; + + @ExcelIgnore + private String insideInquiryNo; + + @ExcelIgnore + private String startDate; + + @ExcelIgnore + private String endDate; + + @ExcelIgnore + private String partNo; + + // 分页参数 + @ExcelIgnore + private Integer page; + + @ExcelIgnore + private Integer limit; +} + diff --git a/src/main/resources/mapper/quote/QuoteDetailMapper.xml b/src/main/resources/mapper/quote/QuoteDetailMapper.xml index 0cc4ec7c..ab6ccd55 100644 --- a/src/main/resources/mapper/quote/QuoteDetailMapper.xml +++ b/src/main/resources/mapper/quote/QuoteDetailMapper.xml @@ -337,4 +337,160 @@ SET show_flag = #{showFlag} WHERE id = #{id} + + + + + +