From 3728fa293e1faf4bf4f9bf41105b84ddb43dc82e Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 02 十一月 2026 16:53:02 +0800
Subject: [PATCH] feat(order-rates): 新增筛选条件下全部订单费用汇总接口

---
 inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderRatesSummaryDto.java              |   16 ++++++++
 inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml                          |   34 ++++++++++++-----
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java |   16 +++++++
 inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java            |    3 +
 inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java    |    6 +++
 inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java          |    3 +
 6 files changed, 67 insertions(+), 11 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java
index 1e1fdbe..4a9d969 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java
@@ -44,6 +44,12 @@
     }
 
 
+    @Operation(summary = "姹囨�荤瓫閫夋潯浠朵笅鍏ㄩ儴璁㈠崟璐圭敤")
+    @GetMapping("/selectRatesSummary")
+    public Result selectRatesSummary(SampleOrderDto sampleOrderDto, String startMonth, String endMonth) {
+        return Result.success(insOrderRatesService.selectRatesSummary(sampleOrderDto, startMonth, endMonth));
+    }
+
     /**
      * 鏇存柊璐圭敤浼樻儬涓庡娉�
      * @param insOrder
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderRatesSummaryDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderRatesSummaryDto.java
new file mode 100644
index 0000000..47d8d2f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderRatesSummaryDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "璁㈠崟璐圭敤姹囨��")
+public class OrderRatesSummaryDto {
+
+    @Schema(description = "绛涢�夋潯浠朵笅鐨勮鍗曟�绘暟锛堝寘鍚墍鏈夊垎椤碉級")
+    private Long count;
+
+    // 閲戦浠ュ瓧绗︿覆杩斿洖锛岄伩鍏嶆祻瑙堝櫒娴偣鏁拌浆鎹㈡崯澶辩簿搴︺��
+    @Schema(description = "绛涢�夋潯浠朵笅鐨勮垂鐢ㄥ悎璁★紙鍏冿級锛屾湁浼樻儬鏃舵寜浼樻儬鍚庨噾棰濊绠楋紝浠ュ瓧绗︿覆杩斿洖")
+    private String totalAmount;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java
index b151a85..b09d1dc 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.inspect.dto.SampleOrderDto;
+import com.ruoyi.inspect.dto.OrderRatesSummaryDto;
 import com.ruoyi.inspect.dto.TemplateRateDto;
 import com.ruoyi.inspect.pojo.InsOrderRates;
 import org.apache.ibatis.annotations.Param;
@@ -19,6 +20,8 @@
  */
 public interface InsOrderRatesMapper extends BaseMapper<InsOrderRates> {
 
+    OrderRatesSummaryDto selectRatesSummary(@Param("ew") QueryWrapper<SampleOrderDto> ew);
+
     /**
      * 鏌ヨ璁㈠崟璐圭敤鍒楄〃
      * @return
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java
index 9043094..ba95326 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.inspect.dto.SampleOrderDto;
+import com.ruoyi.inspect.dto.OrderRatesSummaryDto;
 import com.ruoyi.inspect.dto.TemplateRateDto;
 import com.ruoyi.inspect.pojo.InsOrderRates;
 
@@ -17,6 +18,8 @@
  */
 public interface InsOrderRatesService extends IService<InsOrderRates> {
 
+    OrderRatesSummaryDto selectRatesSummary(SampleOrderDto sampleOrderDto, String startMonth, String endMonth);
+
     /**
      * 鏌ヨ璁㈠崟璐圭敤鍒楄〃锛堝彲鎸夐�佹牱鏈堜唤鍖洪棿绛涢�夛級
      * @param page
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java
index 49afc1e..137adb6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.SampleOrderDto;
+import com.ruoyi.inspect.dto.OrderRatesSummaryDto;
 import com.ruoyi.inspect.dto.TemplateRateDto;
 import com.ruoyi.inspect.mapper.InsOrderRatesMapper;
 import com.ruoyi.inspect.pojo.InsOrderRates;
@@ -38,12 +39,25 @@
      */
     @Override
     public IPage<SampleOrderDto> selectInsOrderRates(Page page, SampleOrderDto sampleOrderDto, String startMonth, String endMonth) {
+        return baseMapper.selectInsOrderRates(page, ratesFilter(sampleOrderDto, startMonth, endMonth));
+    }
+
+    @Override
+    public OrderRatesSummaryDto selectRatesSummary(SampleOrderDto sampleOrderDto, String startMonth, String endMonth) {
+        return baseMapper.selectRatesSummary(ratesFilter(sampleOrderDto, startMonth, endMonth));
+    }
+
+    private QueryWrapper<SampleOrderDto> ratesFilter(SampleOrderDto sampleOrderDto, String startMonth, String endMonth) {
         QueryWrapper<SampleOrderDto> wrapper = QueryWrappers.queryWrappers(sampleOrderDto);
         if (wrapper == null) {
             wrapper = Wrappers.query();
         }
         if (StrUtil.isNotBlank(startMonth) || StrUtil.isNotBlank(endMonth)) {
             try {
+                if (StrUtil.isNotBlank(startMonth) && StrUtil.isNotBlank(endMonth)
+                        && YearMonth.parse(startMonth).isAfter(YearMonth.parse(endMonth))) {
+                    throw new ErrorException("寮�濮嬫湀浠戒笉鑳芥櫄浜庣粨鏉熸湀浠�");
+                }
                 if (StrUtil.isNotBlank(startMonth)) {
                     wrapper.ge("sample_date", YearMonth.parse(startMonth).atDay(1));
                 }
@@ -54,7 +68,7 @@
                 throw new ErrorException("閫佹牱鏃堕棿绛涢�夋牸寮忎笉姝g‘锛屽簲涓� yyyy-MM");
             }
         }
-        return baseMapper.selectInsOrderRates(page, wrapper);
+        return wrapper;
     }
 
     @Override
diff --git a/inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml
index 0778648..d12bbc5 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml
@@ -1,30 +1,44 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ruoyi.inspect.mapper.InsOrderRatesMapper">
-    <!-- 鏌ヨ璐圭敤鍒楄〃 -->
-    <select id="selectInsOrderRates" resultType="com.ruoyi.inspect.dto.SampleOrderDto">
-        select *
-        from (select io.*,
+    <!-- 鍒楄〃鍜屽叏閮ㄦ眹鎬诲叡鐢ㄧ浉鍚岃鍗曡寖鍥达紝姣忎釜璁㈠崟浠呰璐逛竴娆°�� -->
+    <sql id="ratesOrders">
+        select io.*,
         case
         when
         io.type_source = 0
         then io.sample_view
         else io.sample end                            sampleStr,
         GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
-        COALESCE(sum(st.price), 0) total_price
+        MAX(rates.total_price) total_price
         from ins_order io
         LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
-        left join ins_order_standard_template iost on iost.ins_order_id = io.id
-        left join standard_template st on st.id = iost.template_id
-        where iost.id is not null
-        and io.state != 5
-        group by io.id) a
+        join (select iost.ins_order_id, COALESCE(sum(st.price), 0) total_price
+              from ins_order_standard_template iost
+              left join standard_template st on st.id = iost.template_id
+              group by iost.ins_order_id) rates on rates.ins_order_id = io.id
+        where io.state != 5
+        group by io.id
+    </sql>
+    <sql id="ratesFilter">
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
+    </sql>
+    <select id="selectInsOrderRates" resultType="com.ruoyi.inspect.dto.SampleOrderDto">
+        select * from (<include refid="ratesOrders"/>) a
+        <include refid="ratesFilter"/>
         order by a.sample_date desc, a.id desc
     </select>
 
+    <select id="selectRatesSummary" resultType="com.ruoyi.inspect.dto.OrderRatesSummaryDto">
+        select count(*) as count,
+               COALESCE(sum(case when a.is_discount = 1 and a.discount_amount is not null
+                                 then a.discount_amount else a.total_price end), 0) as total_amount
+        from (<include refid="ratesOrders"/>) a
+        <include refid="ratesFilter"/>
+    </select>
+
     <!-- 鏇存柊璁㈠崟鐨勮垂鐢ㄤ紭鎯犱笌澶囨敞 -->
     <update id="updateOrderFee">
         update ins_order

--
Gitblit v1.9.3