liding
6 天以前 3728fa293e1faf4bf4f9bf41105b84ddb43dc82e
feat(order-rates): 新增筛选条件下全部订单费用汇总接口
已添加1个文件
已修改5个文件
78 ■■■■■ 文件已修改
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderRatesSummaryDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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;
}
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
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
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("送样时间筛选格式不正确,应为 yyyy-MM");
            }
        }
        return baseMapper.selectInsOrderRates(page, wrapper);
        return wrapper;
    }
    @Override
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