package com.hai.dao;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * mapper扩展类
 */
public interface HighGasClassGroupTaskMapperExt {

    @Select("<script>" +
            " select " +
            " case when SUM(a.total_price) is not null then SUM(a.total_price) else 0 end refuelPrice," +
            " COUNT(1) refuelNum," +
            " case when SUM(a.gas_oil_liters) is not null then SUM(a.gas_oil_liters) else 0 end refuelLiters" +
            " from high_child_order a" +
            " LEFT JOIN high_order b on b.id = a.order_id" +
            " where a.goods_type = 3 " +
            " and a.gas_class_group_task_id = #{gasClassGroupTaskId} " +
            " and b.order_status in (2,3)" +
            "</script>")
    Map<String, Object> countRefuelData(@Param("gasClassGroupTaskId") Long gasClassGroupTaskId);

    @Select("<script>" +
            "  select" +
            "  case when SUM(a.total_price) is not null then SUM(a.total_price) else 0 end refundPrice," +
            "  COUNT(1) refundNum," +
            "  case when SUM(a.gas_oil_liters) is not null then SUM(a.gas_oil_liters) else 0 end refundLiters" +
            "  from high_child_order a" +
            "  LEFT JOIN high_order b on b.id = a.order_id" +
            "  where a.goods_type = 3 " +
            "  and a.gas_class_group_task_id = #{gasClassGroupTaskId}" +
            "  and b.order_status in (4)" +
            "</script>")
    Map<String, Object> countRefundData(@Param("gasClassGroupTaskId") Long gasClassGroupTaskId);

    @Select("<script>" +
            " SELECT" +
            " a.oil_no oilNo," +
            " case when b.refuelPrice is not null then b.refuelPrice else 0 end refuelPrice," +
            " case when b.refuelNum is not null then b.refuelNum else 0 end refuelNum," +
            " case when b.refuelLiters is not null then b.refuelLiters else 0 end refuelLiters" +
            " FROM" +
            " high_gas_oil_price a " +
            " LEFT JOIN (select gas_oil_no," +
            " case when SUM(a.total_price) is not null then SUM(a.total_price) else 0 end refuelPrice," +
            " COUNT(1) refuelNum," +
            " case when SUM(a.gas_oil_liters) is not null then SUM(a.gas_oil_liters) else 0 end refuelLiters" +
            " from high_child_order a" +
            " LEFT JOIN high_order b on b.id = a.order_id" +
            " where a.gas_class_group_task_id = #{gasClassGroupTaskId} and a.goods_type = 3 and b.order_status in (2,3)" +
            " GROUP BY a.gas_oil_no) b on b.gas_oil_no = a.oil_no" +
            " WHERE a.merchant_store_id = #{gasId} and <![CDATA[ `status` <> 0 ]]> " +
            "</script>")
    List<Map<String, Object>> countOilData(@Param("gasId") Long gasId, @Param("gasClassGroupTaskId") Long gasClassGroupTaskId);

    @Select("select count(1) from high_gas_class_group_task where merchant_store_id = #{gasId} and `status` <> 0")
    int getLatestClassNum(@Param("gasId") Long gasId);
}
