<?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.stdiet.custom.mapper.SysOrderMapper">

    <resultMap type="SysOrder" id="SysOrderResult">
        <result property="orderId" column="order_id"/>
        <result property="customer" column="customer"/>
        <result property="cusId" column="cus_id"/>
        <result property="phone" column="phone"/>
        <result property="amount" column="amount"/>
        <result property="weight" column="weight"/>
        <result property="startTime" column="start_time"/>
        <result property="pauseTime" column="pause_time"/>
        <result property="status" column="status"/>
        <result property="payTypeId" column="pay_type_id"/>
        <result property="payType" column="pay_type"/>
        <result property="preSaleId" column="pre_sale_id"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="afterSaleId" column="after_sale_id"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="nutritionistId" column="nutritionist_id"/>
        <result property="remark" column="remark"/>
        <result property="nutriAssisId" column="nutri_assis_id"/>
        <result property="accountId" column="account_id"/>
        <result property="account" column="account"/>
        <result property="plannerId" column="planner_id"/>
        <result property="plannerAssisId" column="planner_assis_id"/>
        <result property="operatorId" column="operator_id"/>
        <result property="operatorAssisId" column="operator_assis_id"/>
        <result property="recommender" column="recommender"/>
        <result property="orderTime" column="order_time"/>
        <result property="serveTime" column="serve_time"/>
        <result property="serveTimeId" column="serve_time_id"/>
        <result property="reviewStatus" column="review_status"/>
        <result property="giveServeDay" column="give_serve_day"/>
        <result property="conditioningProjectId" column="conditioning_project_id"/>
        <result property="serverEndTime" column="server_end_time"/>
        <result property="becomeFanTime" column="become_fan_time"/>

        <result property="pushPreSaleId"    column="push_pre_sale_id"    />
        <result property="onSaleId" column="on_sale_id"/>
        <result property="orderType" column="order_type"/>
        <result property="orderCountType" column="order_count_type"/>
        <result property="orderMoneyType" column="order_money_type"/>
        <result property="mainOrderId" column="main_order_id"/>
        <result property="afterSaleCommissOrder" column="after_sale_commiss_order"/>
        <result property="commissStartTime" column="commiss_start_time"/>
        <result property="recipesPlanContinue"    column="recipes_plan_continue"    />
        <result property="delFlag" column="del_flag"/>
        <result property="counted" column="counted"/>

        <!-- 非持久化字段 -->
        <result property="afterSale" column="afterSale_name"></result><!-- 售后名称  -->
        <result property="nutritionist" column="nutritionist_name"></result><!-- 营养师名称 -->
        <result property="conditioningProject" column="conditioning_project"></result><!-- 调理项目 -->
    </resultMap>

    <sql id="selectSysOrderVo">
        select o.order_id, o.review_status, o.cus_id, sc.name as customer, sc.phone, sc.fans_time as become_fan_time, o.amount, o.start_time, o.pause_time, o.status, o.weight, ser.dict_label as serve_time,
        o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time,
        o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id,
        o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,
        o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time, o.counted,o.push_pre_sale_id
        from sys_order o
        LEFT JOIN sys_customer sc ON sc.id = o.cus_id
        LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id
        LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = o.account_id
        LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_serve_time') AS ser ON ser.dict_value = o.serve_time_id
        LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'conditioning_project') AS cp ON cp.dict_value = o.conditioning_project_id
    </sql>

    <sql id="searchOrderType">
        <if test="searchOrderTypeArray != null">
            <trim prefix="AND (" suffix=")" suffixOverrides="or">
                <foreach collection="searchOrderTypeArray" separator="or" item="typeArray" index="i">
                    (
                    <foreach collection="typeArray" separator="and" item="type" index="j">
                        <if test="j == 0">
                            order_type = #{type}
                        </if>
                        <if test="j == 1">
                            order_count_type = #{type}
                        </if>
                        <if test="j == 2">
                            order_money_type = #{type}
                        </if>
                    </foreach>
                    )
                </foreach>
            </trim>
        </if>
    </sql>

    <select id="selectAllOrderAmount" parameterType="SysOrder" resultType="BigDecimal">
        SELECT SUM(amount) FROM sys_order
        <where>
            <if test="orderId != null  and orderId != ''">and order_id = #{orderId}</if>
            <if test="customer != null  and customer != ''">
                and (customer like concat('%',#{customer},'%') or phone like concat('%',#{customer},'%'))
            </if>
            <if test="accRange != null">
                and account_id in
                <foreach collection="accRange" separator="," item="acc" open="(" close=")" >
                    #{acc}
                </foreach>
            </if>
            <if test="cusId != null  and cusId != ''">and cus_id = #{cusId}</if>
            <!-- <if test="phone != null  and phone != ''">and phone = #{phone}</if>-->
            <if test="status != null ">and status = #{status}</if>
            <if test="payTypeId != null ">and pay_type_id = #{payTypeId}</if>
            <if test="preSaleId != null ">and pre_sale_id = #{preSaleId}</if>
            <if test="onSaleId != null">
                and on_sale_id = #{onSaleId}
            </if>
            <if test="afterSaleId != null ">and after_sale_id = #{afterSaleId}</if>
            <if test="nutritionistId != null ">and nutritionist_id = #{nutritionistId}</if>
            <if test="nutriAssisId != null ">and nutri_assis_id = #{nutriAssisId}</if>
            <if test="accountId != null ">and account_id = #{accountId}</if>
            <if test="plannerId != null ">and planner_id = #{plannerId}</if>
            <if test="plannerAssisId != null ">and planner_assis_id = #{plannerAssisId}</if>
            <if test="operatorId != null ">and operator_id = #{operatorId}</if>
            <if test="operatorAssisId != null ">and operator_assis_id = #{operatorAssisId}</if>
            <if test="recommender != null  and recommender != ''">and recommender = #{recommender}</if>
            <if test="beginTime != null and beginTime != ''">and date_format(order_time,'%y%m%d') &gt;=
                date_format(#{beginTime},'%y%m%d')
            </if>
            <if test="endTime != null and endTime != ''">and date_format(order_time,'%y%m%d') &lt;=
                date_format(#{endTime},'%y%m%d')
            </if>
            <if test="serveTimeId != null ">and serve_time_id = #{serveTimeId}</if>
            <if test="reviewStatus != null ">and review_status = #{reviewStatus}</if>
            <if test="amountFlag != null">
                <if test="amountFlag == 0">
                    and amount >= 0
                </if>
                <if test="amountFlag == 1">
                    and 0 > amount
                </if>
            </if>
            <include refid="searchOrderType">
                <property name="reviewStatus" value="#{searchOrderTypeArray}"/>
            </include>
            <if test="true">and del_flag = 0</if>
            <!-- 计算总额时需要除去二开售后提成单 -->
            AND after_sale_commiss_order = 0
        </where>
    </select>

    <select id="selectSysOrderList" parameterType="SysOrder" resultMap="SysOrderResult">
        <include refid="selectSysOrderVo"/>
        <where>
            <if test="orderId != null  and orderId != ''">and order_id = #{orderId}</if>
            <if test="customer != null  and customer != ''">
                and (sc.name like concat('%',#{customer},'%') or sc.phone like concat('%',#{customer},'%'))
            </if>
            <if test="accRange != null">
                and account_id in
                <foreach collection="accRange" separator="," item="acc" open="(" close=")">
                    #{acc}
                </foreach>
            </if>
            <if test="cusId != null  and cusId != ''">and cus_id = #{cusId}</if>
            <if test="phone != null  and phone != ''">and sc.phone = #{phone}</if>
            <if test="status != null ">and status = #{status}</if>
            <if test="payTypeId != null ">and pay_type_id = #{payTypeId}</if>
            <if test="onSaleId != null">
                and on_sale_id = #{onSaleId}
            </if>
            <if test="preSaleId != null ">and pre_sale_id = #{preSaleId}</if>
            <if test="afterSaleId != null ">and after_sale_id = #{afterSaleId}</if>
            <if test="nutritionistId != null ">and nutritionist_id = #{nutritionistId}</if>
            <if test="nutriAssisId != null ">and nutri_assis_id = #{nutriAssisId}</if>
            <if test="accountId != null ">and account_id = #{accountId}</if>
            <if test="plannerId != null ">and planner_id = #{plannerId}</if>
            <if test="plannerAssisId != null ">and planner_assis_id = #{plannerAssisId}</if>
            <if test="operatorId != null ">and operator_id = #{operatorId}</if>
            <if test="operatorAssisId != null ">and operator_assis_id = #{operatorAssisId}</if>
            <if test="recommender != null  and recommender != ''">and recommender = #{recommender}</if>
            <if test="beginTime != null and beginTime != ''">and date_format(order_time,'%y%m%d') &gt;=
                date_format(#{beginTime},'%y%m%d')
            </if>
            <if test="endTime != null and endTime != ''">and date_format(order_time,'%y%m%d') &lt;=
                date_format(#{endTime},'%y%m%d')
            </if>
            <if test="serveTimeId != null ">and serve_time_id = #{serveTimeId}</if>
            <if test="reviewStatus != null ">and review_status = #{reviewStatus}</if>
            <if test="amountFlag != null">
                <if test="amountFlag == 0">
                    and amount >= 0
                </if>
                <if test="amountFlag == 1">
                    and 0 > amount
                </if>
            </if>
            <include refid="searchOrderType">
                <property name="reviewStatus" value="#{searchOrderTypeArray}"/>
            </include>
            <if test="true">and o.del_flag = 0</if>
        </where>
        order by order_time desc
    </select>

    <select id="selectSysOrderById" parameterType="Long" resultMap="SysOrderResult">
        <include refid="selectSysOrderVo"/>
        where order_id = #{orderId} and o.del_flag = 0
    </select>

    <insert id="insertSysOrder" parameterType="SysOrder" useGeneratedKeys="true" keyProperty="orderId">
        insert into sys_order
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="orderId != null">order_id,</if>
            <if test="customer != null and customer != ''">customer,</if>
            <if test="cusId != null">cus_id,</if>
            <if test="phone != null">phone,</if>
            <if test="payTypeId != null">pay_type_id,</if>
            <if test="reviewStatus != null">review_status,</if>
            <if test="preSaleId != null">pre_sale_id,</if>
            <if test="status != null">status,</if>
            <if test="weight != null">weight,</if>
            <if test="afterSaleId != null">after_sale_id,</if>
            <if test="startTime != null">start_time,</if>
            <if test="pauseTime != null">pause_time,</if>
            <if test="nutritionistId != null">nutritionist_id,</if>
            <if test="nutriAssisId != null">nutri_assis_id,</if>
            <if test="onSaleId != null">on_sale_id,</if>
            <if test="accountId != null">account_id,</if>
            <if test="plannerId != null">planner_id,</if>
            <if test="plannerAssisId != null">planner_assis_id,</if>
            <if test="operatorAssisId != null">operator_assis_id,</if>
            <if test="operatorId != null">operator_id,</if>
            <if test="serveTimeId != null">serve_time_id,</if>
            <if test="recommender != null">recommender,</if>
            <if test="pushPreSaleId != null">push_pre_sale_id,</if>
            <if test="amount != null">amount,</if>
            <if test="orderTime != null">order_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remark != null">remark,</if>
            <if test="giveServeDay != null">give_serve_day,</if>
            <if test="conditioningProjectId != null">conditioning_project_id,</if>
            <if test="serverEndTime != null">server_end_time,</if>
            <if test="becomeFanTime != null">become_fan_time,</if>
            <if test="orderType != null">order_type,</if>
            <if test="orderCountType != null">order_count_type,</if>
            <if test="orderMoneyType != null">order_money_type,</if>
            <if test="mainOrderId != null">main_order_id,</if>
            <if test="afterSaleCommissOrder != null">after_sale_commiss_order,</if>
            <if test="commissStartTime != null">commiss_start_time,</if>
            <if test="delFlag != null">del_flag,</if>
            <if test="counted != null">counted,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="orderId != null">#{orderId},</if>
            <if test="customer != null and customer != ''">#{customer},</if>
            <if test="cusId != null">#{cusId},</if>
            <if test="phone != null">#{phone},</if>
            <if test="payTypeId != null">#{payTypeId},</if>
            <if test="reviewStatus != null">#{reviewStatus},</if>
            <if test="preSaleId != null">#{preSaleId},</if>
            <if test="status != null">#{status},</if>
            <if test="weight != null">#{weight},</if>
            <if test="afterSaleId != null">#{afterSaleId},</if>
            <if test="startTime != null">#{startTime},</if>
            <if test="pauseTime != null">#{pauseTime},</if>
            <if test="nutritionistId != null">#{nutritionistId},</if>
            <if test="nutriAssisId != null">#{nutriAssisId},</if>
            <if test="onSaleId != null">#{onSaleId},</if>
            <if test="accountId != null">#{accountId},</if>
            <if test="plannerId != null">#{plannerId},</if>
            <if test="plannerAssisId != null">#{plannerAssisId},</if>
            <if test="operatorAssisId != null">#{operatorAssisId},</if>
            <if test="operatorId != null">#{operatorId},</if>
            <if test="serveTimeId != null">#{serveTimeId},</if>
            <if test="recommender != null">#{recommender},</if>
            <if test="pushPreSaleId != null">#{pushPreSaleId},</if>
            <if test="amount != null">#{amount},</if>
            <if test="orderTime != null">#{orderTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remark != null">#{remark},</if>
            <if test="giveServeDay != null">#{giveServeDay},</if>
            <if test="conditioningProjectId != null">#{conditioningProjectId},</if>
            <if test="serverEndTime != null">#{serverEndTime},</if>
            <if test="becomeFanTime != null">#{becomeFanTime},</if>
            <if test="orderType != null">#{orderType},</if>
            <if test="orderCountType != null">#{orderCountType},</if>
            <if test="orderMoneyType != null">#{orderMoneyType},</if>
            <if test="mainOrderId != null">#{mainOrderId},</if>
            <if test="afterSaleCommissOrder != null">#{afterSaleCommissOrder},</if>
            <if test="commissStartTime != null">#{commissStartTime},</if>
            <if test="delFlag != null">#{delFlag},</if>
            <if test="counted != null">#{counted},</if>
        </trim>
    </insert>

    <update id="updateSysOrder" parameterType="SysOrder">
        update sys_order
        <trim prefix="SET" suffixOverrides=",">
            <if test="customer != null and customer != ''">customer = #{customer},</if>
            <if test="cusId != null">cus_id = #{cusId},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="payTypeId != null">pay_type_id = #{payTypeId},</if>
            <if test="reviewStatus != null">review_status = #{reviewStatus},</if>
            <if test="preSaleId != null">pre_sale_id = #{preSaleId},</if>
            <if test="status != null">status = #{status},</if>
            <if test="weight != null">weight = #{weight},</if>
            <if test="afterSaleId != null">after_sale_id = #{afterSaleId},</if>
            <if test="startTime != null">start_time = #{startTime},</if>
            <if test="pauseTime != null">pause_time = #{pauseTime},</if>
            <if test="nutritionistId != null">nutritionist_id = #{nutritionistId},</if>
            <if test="nutriAssisId != null">nutri_assis_id = #{nutriAssisId},</if>
            <if test="onSaleId != null">on_sale_id = #{onSaleId},</if>
            <if test="accountId != null">account_id = #{accountId},</if>
            <if test="plannerId != null">planner_id = #{plannerId},</if>
            <if test="plannerAssisId != null">planner_assis_id = #{plannerAssisId},</if>
            <if test="operatorAssisId != null">operator_assis_id = #{operatorAssisId},</if>
            <if test="operatorId != null">operator_id = #{operatorId},</if>
            <if test="serveTimeId != null">serve_time_id = #{serveTimeId},</if>
            <if test="recommender != null">recommender = #{recommender},</if>
            <if test="pushPreSaleId != null">push_pre_sale_id = #{pushPreSaleId},</if>
            <if test="amount != null">amount = #{amount},</if>
            <if test="orderTime != null">order_time = #{orderTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="giveServeDay != null">give_serve_day = #{giveServeDay},</if>
            <if test="conditioningProjectId != null">conditioning_project_id = #{conditioningProjectId},</if>
            <if test="serverEndTime != null">server_end_time = #{serverEndTime},</if>
            <if test="becomeFanTime != null">become_fan_time = #{becomeFanTime},</if>
            <if test="orderType != null">order_type = #{orderType},</if>
            <if test="orderCountType != null">order_count_type = #{orderCountType},</if>
            <if test="orderMoneyType != null">order_money_type = #{orderMoneyType},</if>
            <if test="mainOrderId != null">main_order_id = #{mainOrderId},</if>
            <if test="afterSaleCommissOrder != null">after_sale_commiss_order = #{afterSaleCommissOrder},</if>
            <if test="commissStartTime != null">commiss_start_time = #{commissStartTime},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="counted != null">counted = #{counted},</if>
        </trim>
        where order_id = #{orderId}
    </update>

    <delete id="deleteSysOrderById" parameterType="Long">
        update sys_order set del_flag = 1 where order_id = #{orderId}
    </delete>

    <delete id="deleteSysOrderByIds" parameterType="String">
        <!--        delete from sys_order where order_id in-->
        <!--        <foreach item="orderId" collection="array" open="(" separator="," close=")">-->
        <!--            #{orderId}-->
        <!--        </foreach>-->
    </delete>

    <resultMap type="SysOrder" id="SysOrderResultExtended">
        <result property="orderId" column="order_id"/>
        <result property="customer" column="customer"/>
        <result property="cusId" column="cus_id"/>
        <result property="phone" column="phone"/>
        <result property="amount" column="amount"/>
        <result property="weight" column="weight"/>
        <result property="startTime" column="start_time"/>
        <result property="pauseTime" column="pause_time"/>
        <result property="status" column="status"/>
        <result property="payTypeId" column="pay_type_id"/>
        <result property="payType" column="pay_type"/>
        <result property="preSaleId" column="pre_sale_id"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="afterSaleId" column="after_sale_id"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="nutritionistId" column="nutritionist_id"/>
        <result property="remark" column="remark"/>
        <result property="nutriAssisId" column="nutri_assis_id"/>
        <result property="accountId" column="account_id"/>
        <result property="account" column="account"/>
        <result property="plannerId" column="planner_id"/>
        <result property="plannerAssisId" column="planner_assis_id"/>
        <result property="operatorId" column="operator_id"/>
        <result property="operatorAssisId" column="operator_assis_id"/>
        <result property="recommender" column="recommender"/>
        <result property="orderTime" column="order_time"/>
        <result property="serveTime" column="serve_time"/>
        <result property="serveTimeId" column="serve_time_id"/>
        <result property="reviewStatus" column="review_status"/>
        <result property="giveServeDay" column="give_serve_day"/>
        <result property="conditioningProjectId" column="conditioning_project_id"/>
        <result property="serverEndTime" column="server_end_time"/>
        <result property="becomeFanTime" column="become_fan_time"/>

        <result property="pushPreSaleId"    column="push_pre_sale_id"    />
        <result property="onSaleId" column="on_sale_id"/>
        <result property="orderType" column="order_type"/>
        <result property="orderCountType" column="order_count_type"/>
        <result property="orderMoneyType" column="order_money_type"/>
        <result property="mainOrderId" column="main_order_id"/>
        <result property="afterSaleCommissOrder" column="after_sale_commiss_order"/>
        <result property="commissStartTime" column="commiss_start_time"/>
        <result property="recipesPlanContinue"    column="recipes_plan_continue"    />
        <result property="delFlag" column="del_flag"/>

        <!-- 非持久化字段 -->
        <result property="afterSale" column="afterSale_name"></result><!-- 售后名称  -->
        <result property="nutritionist" column="nutritionist_name"></result><!-- 营养师名称 -->
        <!--<association property="orderPauseList" column="order_id" select="getOrderPauseByOrderId"/>-->
    </resultMap>

    <resultMap type="SysOrderPause" id="SysOrderPauseResult">
        <result property="id" column="id"/>
        <result property="orderId" column="order_id"/>
        <result property="pauseStartDate" column="pause_start_date"/>
        <result property="pauseEndDate" column="pause_end_date"/>
        <result property="reason" column="reason"/>
        <result property="remarks" column="remarks"/>
        <result property="createTime" column="create_time"/>
        <result property="createBy" column="create_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="delFlag" column="del_flag"/>
    </resultMap>

    <select id="getOrderPauseByOrderId" parameterType="Long" resultMap="SysOrderPauseResult">
        select id, order_id, pause_start_date, pause_end_date, reason, remarks, create_time, create_by, update_time, update_by, del_flag from sys_recipes_pause sop
        where del_flag = 0 and order_id = #{order_id}
    </select>

    <!-- 查询2021年开始的已审核的订单信息(用于计算提成,请勿随意改动) -->
    <select id="selectSimpleOrderMessage" resultMap="SysOrderResultExtended" parameterType="SysCommision">
        select
        o.order_id,o.order_time,o.commiss_start_time,o.server_end_time,o.customer,o.review_status,o.amount,o.serve_time_id,o.give_serve_day,o.after_sale_id,su_sale.nick_name
        as afterSale_name,o.nutritionist_id,su_nutritionist.nick_name as nutritionist_name
        from sys_order o
        left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0
        left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag =
        0
        where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR
        su_nutritionist.user_id is not null)
        and o.amount is not null
        <if test="reviewStatus != null and reviewStatus != ''">
            and review_status = #{reviewStatus}
        </if>
        <if test="userId != null">
            and (
              su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId}
              <!-- 是否查询根据用户ID查询对应替换订单 -->
              <!--<if test="replaceOrderFlag != null">-->
                or o.order_id in (select r.order_id from sys_order_nutritionist_replace_record r where r.del_flag = 0 and (r.after_sale_id = #{userId} or r.nutritionist_id = #{userId}) )
             <!--</if>-->
            )
        </if>
        <if test="endTime != null and endTime != ''">
            AND DATE_FORMAT(o.order_time,'%Y-%m-%d') &lt;= #{endTime}
        </if>
        <if test="serverScopeEndTime != null and serverScopeEndTime != ''">
            AND #{serverScopeEndTime} >= DATE_FORMAT(o.commiss_start_time,'%Y-%m-%d')
        </if>
        order by o.order_time desc
    </select>

    <!-- 查询2021年开始的已审核的订单信息的总条数(用于计算提成,请勿随意改动) -->
    <select id="selectSimpleOrderMessageCount" resultType="int" parameterType="SysCommision">
        select count(o.order_id) as orderCount
        from sys_order o
        left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0
        left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag =
        0
        where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR
        su_nutritionist.user_id is not null)
        and o.amount is not null
        <if test="reviewStatus != null and reviewStatus != ''">
            and review_status = #{reviewStatus}
        </if>
        <if test="userId != null">
            and (
            su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId}
            <!-- 是否查询根据用户ID查询对应替换订单 -->
            <!--<if test="replaceOrderFlag != null">-->
            or o.order_id in (select r.order_id from sys_order_nutritionist_replace_record r where r.del_flag = 0 and (r.after_sale_id = #{userId} or r.nutritionist_id = #{userId}) )
            <!--</if>-->
            )
        </if>
        <if test="endTime != null and endTime != ''">
            AND DATE_FORMAT(o.order_time,'%Y-%m-%d') &lt;= #{endTime}
        </if>
        <if test="serverScopeEndTime != null and serverScopeEndTime != ''">
            AND #{serverScopeEndTime} >= DATE_FORMAT(o.commiss_start_time,'%Y-%m-%d')
        </if>
        order by o.order_time desc
    </select>

    <!-- 查询售后、营养师的每个月服务总金额 -->
    <select id="getTotalAmountByUserId" parameterType="SysCommision"
            resultType="com.stdiet.custom.dto.response.EveryMonthTotalAmount">
        SELECT s.yearMonth,SUM(s.amount) AS totalAmount FROM
        (
        SELECT CONCAT(YEAR(o.order_time),'',MONTH(o.order_time)) AS yearMonth,o.amount
        FROM sys_order o
        LEFT JOIN sys_user su_sale ON su_sale.user_id = o.after_sale_id AND su_sale.del_flag = 0
        LEFT JOIN sys_user su_nutritionist ON su_nutritionist.user_id = o.nutritionist_id AND su_nutritionist.del_flag =
        0
        where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR
        su_nutritionist.user_id is not null)
        and o.amount is not null
        <if test="reviewStatus != null and reviewStatus != ''">
            and o.review_status = #{reviewStatus}
        </if>
        <if test="userId != null"><!-- 限于营养师、售后不可能同一个的情况下 -->
            and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
        </if>
        <if test="endTime != null and endTime != ''">
            AND DATE_FORMAT(o.order_time,'%Y-%m-%d') &lt;= #{endTime}
        </if>
        ORDER BY o.order_time ASC
        ) s
        GROUP BY s.yearMonth
    </select>

    <!-- 根据客户信息查询客户的订单列表数量 -->
    <select id="getOrderCountByCustomer" parameterType="SysCustomer" resultType="int">
        SELECT count(so.order_id) FROM sys_order so LEFT JOIN sys_customer sc ON sc.id = so.cus_id AND sc.del_flag = 0
        WHERE so.del_flag = 0
        <if test="phone != null and phone != ''">
            and sc.phone = #{phone}
        </if>
        <if test="id != null">
            and sc.id = #{id}
        </if>
    </select>

    <!-- 根据客户ID查询该客户下所有订单 -->
    <select id="getAllOrderByCusId" parameterType="Long" resultMap="SysOrderResult">
        select * from sys_order where del_flag = 0 and cus_id = #{cusId} order by order_time asc
    </select>

    <!-- 根据微信openId查询客户订单数量 -->
    <select id="getOrderCountByOpenId" parameterType="String" resultType="int">
      select count(so.order_id) from sys_order so
      where so.del_flag = 0 and so.cus_id is not null and so.cus_id = (select su.cus_id from sys_wx_user_info su where su.openid = #{openid} limit 1)
    </select>

    <!-- 根据营养师ID查询最后一单的情况 -->
    <select id="getLastOrderByNutritionistId" parameterType="Long" resultMap="SysOrderResult">
        select * from sys_order so
        where del_flag = 0 and nutritionist_id = #{nutritionistId} order by order_id desc limit 1
    </select>
</mapper>