src/main/java/com/ruoyi/purchase/controller/ProcurementBusinessSummaryController.java
@@ -8,7 +8,7 @@ import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryStatisticsDto; import com.ruoyi.purchase.service.impl.ProcurementBusinessSummaryServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -19,7 +19,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * @author :yys @@ -35,8 +34,15 @@ private ProcurementBusinessSummaryServiceImpl procurementBusinessSummaryService; @GetMapping("/listPage") public AjaxResult listPage(Page page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { public AjaxResult listPage(Page<?> page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { return AjaxResult.success(procurementBusinessSummaryService.listPage(page, procurementBusinessSummaryDto)); } @ApiOperation("éè´ä¸å¡æ±æ»ç»è®¡ï¼éè´æ»é¢/ååç§ç±»/鿬¾æ»é¢ï¼") @GetMapping("/statistics") public AjaxResult statistics(ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { ProcurementBusinessSummaryStatisticsDto stats = procurementBusinessSummaryService.statistics(procurementBusinessSummaryDto); return AjaxResult.success(stats); } /** @@ -45,7 +51,7 @@ @Log(title = "导åºéè´æ¥è¡¨", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { Page page = new Page(-1,-1); Page<?> page = new Page<>(-1, -1); IPage<ProcurementBusinessSummaryDto> list = procurementBusinessSummaryService.listPage(page, procurementBusinessSummaryDto); ExcelUtil<ProcurementBusinessSummaryDto> util = new ExcelUtil<ProcurementBusinessSummaryDto>(ProcurementBusinessSummaryDto.class); util.exportExcel(response, list.getRecords(), "éè´æ¥è¡¨"); src/main/java/com/ruoyi/purchase/dto/ProcurementBusinessSummaryStatisticsDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.purchase.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel("éè´ä¸å¡æ°æ®ç»è®¡") public class ProcurementBusinessSummaryStatisticsDto { @ApiModelProperty("éè´æ»é¢") private BigDecimal purchaseTotalAmount; @ApiModelProperty("åååç±»ï¼åååç±»ï¼") private Integer productCategoryCount; @ApiModelProperty("éè´§æ»é¢") private BigDecimal returnTotalAmount; } src/main/java/com/ruoyi/purchase/service/impl/ProcurementBusinessSummaryServiceImpl.java
@@ -2,10 +2,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryStatisticsDto; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -21,7 +20,11 @@ @Autowired private SalesLedgerProductMapper salesLedgerProductMapper; public IPage<ProcurementBusinessSummaryDto> listPage(Page page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { public IPage<ProcurementBusinessSummaryDto> listPage(Page<?> page, ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { return salesLedgerProductMapper.procurementBusinessSummaryListPage(page, procurementBusinessSummaryDto); } public ProcurementBusinessSummaryStatisticsDto statistics(ProcurementBusinessSummaryDto procurementBusinessSummaryDto) { return salesLedgerProductMapper.procurementBusinessSummaryStatistics(procurementBusinessSummaryDto); } } src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -3,8 +3,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.config.MyBaseMapper; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryStatisticsDto; import com.ruoyi.sales.dto.LossProductModelDto; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.pojo.SalesLedgerProduct; @@ -28,11 +28,13 @@ SalesLedgerProduct selectSalesLedgerProductByMainId(@Param("productMainId") Long productMainId); IPage<SalesLedgerProductDto> listPage(Page page, @Param("req") SalesLedgerProductDto salesLedgerProduct); IPage<SalesLedgerProductDto> listPage(Page<?> page, @Param("req") SalesLedgerProductDto salesLedgerProduct); IPage<SalesLedgerProductDto> listPagePurchaseLedger(Page page, @Param("req") SalesLedgerProductDto salesLedgerProduct); IPage<SalesLedgerProductDto> listPagePurchaseLedger(Page<?> page, @Param("req") SalesLedgerProductDto salesLedgerProduct); IPage<ProcurementBusinessSummaryDto> procurementBusinessSummaryListPage(Page page, @Param("req") ProcurementBusinessSummaryDto procurementBusinessSummaryDto); IPage<ProcurementBusinessSummaryDto> procurementBusinessSummaryListPage(Page<?> page, @Param("req") ProcurementBusinessSummaryDto procurementBusinessSummaryDto); ProcurementBusinessSummaryStatisticsDto procurementBusinessSummaryStatistics(@Param("req") ProcurementBusinessSummaryDto procurementBusinessSummaryDto); List<LossProductModelDto> selectProductBomStructure(@Param("salesLedegerId") Long salesLedegerId); src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -104,6 +104,7 @@ </where> order by slp.register_date desc </select> <select id="procurementBusinessSummaryListPage" resultType="com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto"> SELECT @@ -115,17 +116,28 @@ COUNT(DISTINCT slp.sales_ledger_id) AS purchaseTimes, <!-- å¹³ååä»· = æ»éè´éé¢/æ»éè´æ°éï¼ä¿ç2ä½å°æ°ï¼é¿å é¤0 --> ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 2) AS averagePrice, <!-- 该产åå¤§ç±»ä¸æåä¸ä¸ªå½å ¥æ¥æï¼åå°è´¦ä¸»è¡¨çentry_dateï¼ --> <!-- 该åç»ä¸æåä¸ä¸ªå½å ¥æ¥æï¼åå°è´¦ä¸»è¡¨çentry_dateï¼ --> MAX(sl.entry_date) AS entryDate, COALESCE(NULLIF(SUM(t1.return_quantity), 0), 0) AS return_quantity, COALESCE(SUM(t2.total_amount), 0) AS return_amount, COALESCE(SUM(rop.return_quantity), 0) AS return_quantity, COALESCE(SUM(rop.allocated_return_amount), 0) AS return_amount, pm.thickness FROM sales_ledger_product slp <!-- å ³èå°è´¦ä¸»è¡¨ï¼è·åå½å ¥æ¥æentry_date --> LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id left join purchase_return_order_products as t1 on t1.sales_ledger_product_id = slp.id left join purchase_return_orders as t2 on t2.id = t1.purchase_return_order_id left join product_model pm on pm.id = slp.product_model_id LEFT JOIN ( SELECT t1.sales_ledger_product_id, t1.return_quantity, IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS allocated_return_amount FROM purchase_return_order_products t1 INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id INNER JOIN ( SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty FROM purchase_return_order_products GROUP BY purchase_return_order_id ) q ON q.purchase_return_order_id = t1.purchase_return_order_id ) rop ON rop.sales_ledger_product_id = slp.id LEFT JOIN product_model pm ON pm.id = slp.product_model_id WHERE slp.type = 2 <!-- åºå®çéï¼éè´å°è´¦ï¼type=2ï¼ --> <!-- éè´æ¥æçéï¼å¯éæ¡ä»¶ --> <if test="req.entryDateStart != null and req.entryDateEnd != null"> @@ -135,11 +147,45 @@ <if test="req.productCategory != null and req.productCategory != ''"> AND slp.product_category = #{req.productCategory} </if> <!-- æäº§å大类åç»èå --> GROUP BY slp.product_category <!-- æäº§å大类æåº --> ORDER BY slp.product_category <!-- æåç»ç»´åº¦èåï¼é¿å ONLY_FULL_GROUP_BY é误ä¸ä¸ç¡®å®å¼ï¼ --> GROUP BY slp.product_category, slp.specification_model, sl.supplier_name, pm.thickness ORDER BY slp.product_category </select> <select id="procurementBusinessSummaryStatistics" resultType="com.ruoyi.purchase.dto.ProcurementBusinessSummaryStatisticsDto"> SELECT COALESCE(SUM(slp.tax_inclusive_total_price), 0) AS purchaseTotalAmount, COALESCE(COUNT(DISTINCT slp.product_category), 0) AS productCategoryCount, COALESCE(SUM(rop.allocated_return_amount), 0) AS returnTotalAmount FROM sales_ledger_product slp LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id LEFT JOIN ( SELECT t1.sales_ledger_product_id, IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS allocated_return_amount FROM purchase_return_order_products t1 INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id INNER JOIN ( SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty FROM purchase_return_order_products GROUP BY purchase_return_order_id ) q ON q.purchase_return_order_id = t1.purchase_return_order_id ) rop ON rop.sales_ledger_product_id = slp.id WHERE slp.type = 2 <if test="req.entryDateStart != null and req.entryDateEnd != null"> AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd} </if> <if test="req.productCategory != null and req.productCategory != ''"> AND slp.product_category = #{req.productCategory} </if> </select> <select id="selectProductBomStructure" resultType="com.ruoyi.sales.dto.LossProductModelDto"> select a.model,