<?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.kmall.admin.dao.OrderDao">

    <!-- 可根据自己的需求，是否要使用 -->
    <resultMap type="com.kmall.admin.entity.OrderEntity" id="orderMap">
        <result property="id" column="id"/>
        <result property="merchOrderSn" column="merch_order_sn"/>
        <result property="orderSn" column="order_sn"/>
        <result property="userId" column="user_id"/>
        <result property="orderStatus" column="order_status"/>
        <result property="shippingStatus" column="shipping_status"/>
        <result property="payStatus" column="pay_status"/>
        <result property="consignee" column="consignee"/>
        <result property="country" column="country"/>
        <result property="province" column="province"/>
        <result property="city" column="city"/>
        <result property="district" column="district"/>
        <result property="address" column="address"/>
        <result property="mobile" column="mobile"/>
        <result property="postscript" column="postscript"/>
        <result property="shippingId" column="shipping_id"/>
        <result property="shippingName" column="shipping_name"/>
        <result property="shippingCode" column="shipping_code"/>
        <result property="shippingNo" column="shipping_no"/>
        <result property="payId" column="pay_id"/>
        <result property="payName" column="pay_name"/>
        <result property="shippingFee" column="shipping_fee"/>
        <result property="actualPrice" column="actual_price"/>
        <result property="integral" column="integral"/>
        <result property="integralMoney" column="integral_money"/>
        <result property="orderPrice" column="order_price"/>
        <result property="goodsPrice" column="goods_price"/>
        <result property="addTime" column="add_time"/>
        <result property="confirmTime" column="confirm_time"/>
        <result property="payTime" column="pay_time"/>
        <result property="freightPrice" column="freight_price"/>
        <result property="couponId" column="coupon_id"/>
        <result property="couponPrice" column="coupon_price"/>
        <result property="callbackStatus" column="callback_status"/>
        <result property="orderType" column="order_type"/>
        <result property="storeId" column="store_id"/>
        <result property="userName" column="username"/>
        <result property="orderType" column="order_type"/>
        <result property="activityId" column="activity_id"/>
        <result property="deliveryDate" column="delivery_date"/>
        <result property="deliveryRemark" column="delivery_remark"/>
        <result property="predictTime" column="predict_time"/>
        <result property="orderBizType" column="order_biz_type"/>
        <result property="isPaymentSend" column="is_payment_send"/>
        <result property="isEleOrderSend" column="is_ele_order_send"/>
        <result property="isCustomsSend" column="is_customs_send"/>
        <result property="payFlag" column="pay_flag"/>
        <result column="buyer_pay_check" property="buyerPayCheck"/>
        <result property="merchSn" column="merch_sn"/>
        <result property="sku" column="sku"/>
        <result property="createTime" column="create_time"/>
        <result property="modTime" column="mod_time"/>
        <result property="isOnfflineOrder" column="is_onffline_order"/>
        <result property="orderSnWx" column="order_sn_wx"/>
        <result property="isMergePay" column="is_merge_pay"/>
        <result property="payTransactionId" column="pay_transaction_id"/>
        <result property="storeName" column="store_name"/>
    </resultMap>

    <select id="queryObject" resultType="com.kmall.admin.entity.OrderEntity">
		select o.*,u.username as username
        from mall_order o
        left join mall_user u on o.user_id = u.id
        where o.id = #{value}
	</select>
    <select id="queryObjectBySysUser" resultType="com.kmall.admin.entity.OrderEntity">
        select o.*,u.username as username
        from mall_order o
        left join sys_user u on o.user_id = u.user_id
        where o.id = #{value}
    </select>

    <select id="queryObjectByActivityId" resultType="com.kmall.admin.entity.OrderEntity">
        select o.*,u.username as username
        from mall_order o
        left join mall_user u on o.user_id = u.id
        where o.activity_id = #{activityId} and o.order_type = #{orderType}
    </select>


    <select id="getTotalActualPrice" resultType="java.lang.Double">
        select sum(a.actual_price) 'totalActualPrice' from mall_order a where merch_order_sn = #{merchOrderSn}
    </select>

    <select id="queryObjectByMerchOrderSn" resultType="com.kmall.admin.entity.OrderEntity">
        select * from mall_order a where merch_order_sn = #{merchOrderSn}
    </select>

    <select id="queryList" resultType="com.kmall.admin.entity.OrderEntity">
        SELECT
        o.*,
        u.username AS username,
        p.is_payment_send,
        p.is_ele_order_send,
        p.is_customs_send,
        s.store_name
        FROM
        mall_order o
        LEFT JOIN mall_user u ON o.user_id = u.id
        LEFT JOIN mall_order_process_record p ON o.order_sn = p.order_sn
        left join mall_store s on o.store_id = s.id
        WHERE 1=1
        <if test="startTime != null and startTime != ''">
            AND o.add_time <![CDATA[ >  ]]> #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND o.add_time <![CDATA[ <  ]]> #{endTime}
        </if>
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
            AND o.merch_order_sn = #{merchOrderSn}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="orderSn != null and orderSn.trim() != ''">
            AND o.order_sn LIKE concat('%',#{orderSn},'%')
        </if>
        <if test="shippingStatus != null and shippingStatus.trim() != ''">
            AND o.shipping_status = #{shippingStatus}
        </if>
        <if test="payStatus != null and payStatus.trim() != ''">
            AND o.pay_status = #{payStatus}
        </if>
        <if test="orderStatus != null and orderStatus.trim() != ''">
            AND o.order_status = #{orderStatus}
        </if>
        <if test="shippingId != null and shippingId != 0">
            AND o.shipping_id = #{shippingId}
        </if>
        <if test="orderType != null and orderType.trim() != ''">
            AND o.order_type = #{orderType}
        </if>
        <if test="isOnfiilineOrder != null">
            AND o.is_onffline_order = #{isOnfiilineOrder}
        </if>
        <if test="ids != null and ids.trim() != ''">
            AND o.id in (${ids})
        </if>
        <choose>
            <when test="sidx != null and sidx.trim() != ''">
                order by ${sidx} ${order}
            </when>
            <otherwise>
                order by id desc
            </otherwise>
        </choose>
        <if test="offset != null and limit != null">
            limit #{offset}, #{limit}
        </if>
    </select>

    <select id="queryExportList" resultType="com.kmall.admin.entity.OrderEntity">
        SELECT
            o.*,
            u.username AS username,
            p.is_payment_send,
            p.is_ele_order_send,
            p.is_customs_send,
            g.sku,
            g.goods_name,
            g.number,
            g.retail_price,
            s.store_name
        FROM
          mall_order o
        LEFT JOIN mall_user u ON o.user_id = u.id
        LEFT JOIN mall_order_process_record p ON o.order_sn = p.order_sn
        Left join mall_order_goods g on o.id = g.order_id
        left join mall_store s on o.store_id = s.id
        WHERE 1=1
        <if test="startTime != null and startTime != ''">
            AND o.add_time <![CDATA[ >  ]]> #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND o.add_time <![CDATA[ <  ]]> #{endTime}
        </if>
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
            AND o.merch_order_sn = #{merchOrderSn}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="orderSn != null and orderSn.trim() != ''">
            AND o.order_sn LIKE concat('%',#{orderSn},'%')
        </if>
        <if test="shippingStatus != null and shippingStatus.trim() != ''">
            AND o.shipping_status = #{shippingStatus}
        </if>
        <if test="payStatus != null and payStatus.trim() != ''">
            AND o.pay_status = #{payStatus}
        </if>
        <if test="orderStatus != null and orderStatus.trim() != ''">
            AND o.order_status = #{orderStatus}
        </if>
        <if test="shippingId != null and shippingId != 0">
            AND o.shipping_id = #{shippingId}
        </if>
        <if test="orderType != null and orderType.trim() != ''">
            AND o.order_type = #{orderType}
        </if>
        <if test="isOnfiilineOrder != null">
            AND o.is_onffline_order = #{isOnfiilineOrder}
        </if>
        <if test="ids != null and ids.trim() != ''">
            AND o.id in (${ids})
        </if>
        <choose>
            <when test="sidx != null and sidx.trim() != ''">
                order by ${sidx} ${order}
            </when>
            <otherwise>
                order by id desc
            </otherwise>
        </choose>
        <if test="offset != null and limit != null">
            limit #{offset}, #{limit}
        </if>
    </select>

    <select id="queryTotal" resultType="int">
        select count(*) from mall_order o
        left join mall_store s on o.store_id = s.id WHERE 1=1
        <if test="startTime != null and startTime != ''">
            AND o.add_time <![CDATA[ >  ]]> #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND o.add_time <![CDATA[ <  ]]> #{endTime}
        </if>
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
            AND o.merch_order_sn = #{merchOrderSn}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="orderSn != null and orderSn.trim() != ''">
            AND o.order_sn LIKE concat('%',#{orderSn},'%')
        </if>
        <if test="shippingStatus != null and shippingStatus.trim() != ''">
            AND o.shipping_status = #{shippingStatus}
        </if>
        <if test="payStatus != null and payStatus.trim() != ''">
            AND o.pay_status = #{payStatus}
        </if>
        <if test="orderStatus != null and orderStatus.trim() != ''">
            AND o.order_status = #{orderStatus}
        </if>
        <if test="shippingId != null and shippingId != 0">
            AND o.shipping_id = #{shippingId}
        </if>
        <if test="orderType != null and orderType.trim() != ''">
            AND o.order_type = #{orderType}
        </if>
        <if test="isOnfiilineOrder != null">
            AND o.is_onffline_order = #{isOnfiilineOrder}
        </if>
        <if test="ids != null and ids.trim() != ''">
            AND o.id in (${ids})
        </if>
    </select>
    <select id="queryOffilineOrderList" resultType="com.kmall.admin.entity.OrderEntity">
        SELECT
        o.*,
        u.username AS username,
        p.is_payment_send,
        p.is_ele_order_send,
        p.is_customs_send
        FROM
        mall_order o
        LEFT JOIN sys_user u ON o.user_id = u.user_id
        LEFT JOIN mall_order_process_record p ON o.order_sn = p.order_sn
        left join mall_store s on o.store_id = s.id
        WHERE 1=1
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        <if test="orderSn != null and orderSn.trim() != ''">
            AND o.order_sn LIKE concat('%',#{orderSn},'%')
        </if>
        <if test="shippingStatus != null and shippingStatus.trim() != ''">
            AND o.shipping_status = #{shippingStatus}
        </if>
        <if test="payStatus != null and payStatus.trim() != ''">
            AND o.pay_status = #{payStatus}
        </if>
        <if test="orderStatus != null and orderStatus.trim() != ''">
            AND o.order_status = #{orderStatus}
        </if>
        <if test="shippingId != null and shippingId != 0">
            AND o.shipping_id = #{shippingId}
        </if>
        <if test="orderType != null and orderType.trim() != ''">
            AND o.order_type = #{orderType}
        </if>
        <if test="isOnfiilineOrder != null">
            AND o.is_onffline_order = #{isOnfiilineOrder}
        </if>
        <if test="ids != null and ids.trim() != ''">
            AND o.id in (${ids})
        </if>
        <choose>
            <when test="sidx != null and sidx.trim() != ''">
                order by ${sidx} ${order}
            </when>
            <otherwise>
                order by id desc
            </otherwise>
        </choose>
        <if test="offset != null and limit != null">
            limit #{offset}, #{limit}
        </if>
    </select>

    <insert id="save" parameterType="com.kmall.admin.entity.OrderEntity" useGeneratedKeys="true" keyProperty="id">
		insert into mall_order
		(
			`order_sn`, 
			`user_id`, 
			`order_status`, 
			`shipping_status`, 
			`pay_status`, 
			`consignee`, 
			`country`, 
			`province`, 
			`city`, 
			`district`,
			`address`, 
			`mobile`, 
			`postscript`, 
			`shipping_id`, 
			`shipping_name`,
			`shipping_code`,
			`shipping_no`,
			`pay_id`, 
			`pay_name`, 
			`shipping_fee`, 
			`actual_price`, 
			`integral`, 
			`integral_money`, 
			`order_price`, 
			`goods_price`, 
			`add_time`, 
			`confirm_time`, 
			`pay_time`, 
			`freight_price`, 
			`coupon_id`,
			`coupon_price`, 
			`callback_status`,
			`order_type`,
			`store_id`,
			`order_biz_type`,
			`is_onffline_order`,
			`order_sn_wx`,
			`pay_flag`,
            `merch_sn`,
            `create_time`,
            `mod_time`
		)
		values
		(
			#{orderSn}, 
			#{userId}, 
			#{orderStatus}, 
			#{shippingStatus}, 
			#{payStatus}, 
			#{consignee}, 
			#{country}, 
			#{province}, 
			#{city}, 
			#{district}, 
			#{address}, 
			#{mobile}, 
			#{postscript}, 
			#{shippingId}, 
			#{shippingName},
			#{shippingCode},
			#{shippingNo},
			#{payId}, 
			#{payName}, 
			#{shippingFee}, 
			#{actualPrice}, 
			#{integral}, 
			#{integralMoney}, 
			#{orderPrice}, 
			#{goodsPrice}, 
			#{addTime}, 
			#{confirmTime}, 
			#{payTime}, 
			#{freightPrice}, 
			#{couponId},
			#{couponPrice}, 
			#{callbackStatus},
			#{orderType},
			#{storeId},
			#{orderBizType},
			#{isOnfflineOrder},
			#{orderSnWx},
			#{payFlag},
            #{merchSn},
            #{createTime},
            #{modTime}
		)
	</insert>

    <update id="update" parameterType="com.kmall.admin.entity.OrderEntity">
        update mall_order
        <set>
            <if test="orderSn != null">`order_sn` = #{orderSn},</if>
            <if test="userId != null">`user_id` = #{userId},</if>
            <if test="orderStatus != null">`order_status` = #{orderStatus},</if>
            <if test="shippingStatus != null">`shipping_status` = #{shippingStatus},</if>
            <if test="payStatus != null">`pay_status` = #{payStatus},</if>
            <if test="consignee != null">`consignee` = #{consignee},</if>
            <if test="country != null">`country` = #{country},</if>
            <if test="province != null">`province` = #{province},</if>
            <if test="city != null">`city` = #{city},</if>
            <if test="district != null">`district` = #{district},</if>
            <if test="address != null">`address` = #{address},</if>
            <if test="mobile != null">`mobile` = #{mobile},</if>
            <if test="postscript != null">`postscript` = #{postscript},</if>
            <if test="shippingId != null">`shipping_id` = #{shippingId},</if>
            <if test="shippingName != null">`shipping_name` = #{shippingName},</if>
            <if test="shippingCode != null">`shipping_code` = #{shippingCode},</if>
            <if test="shippingNo != null">`shipping_no` = #{shippingNo},</if>
            <if test="payId != null">`pay_id` = #{payId},</if>
            <if test="payName != null">`pay_name` = #{payName},</if>
            <if test="shippingFee != null">`shipping_fee` = #{shippingFee},</if>
            <if test="actualPrice != null">`actual_price` = #{actualPrice},</if>
            <if test="integral != null">`integral` = #{integral},</if>
            <if test="integralMoney != null">`integral_money` = #{integralMoney},</if>
            <if test="orderPrice != null">`order_price` = #{orderPrice},</if>
            <if test="goodsPrice != null">`goods_price` = #{goodsPrice},</if>
            <if test="addTime != null">`add_time` = #{addTime},</if>
            <if test="confirmTime != null">`confirm_time` = #{confirmTime},</if>
            <if test="payTime != null">`pay_time` = #{payTime},</if>
            <if test="freightPrice != null">`freight_price` = #{freightPrice},</if>
            <if test="couponId != null">`coupon_id` = #{couponId},</if>
            <if test="couponPrice != null">`coupon_price` = #{couponPrice},</if>
            <if test="callbackStatus != null">`callback_status` = #{callbackStatus},</if>
            <if test="orderType != null">`order_type` = #{orderType},</if>
            <if test="storeId != null">`store_id` = #{storeId},</if>
            <if test="payFlag != null">`pay_flag` = #{payFlag},</if>
            <if test="orderSnWx != null">`order_sn_wx` = #{orderSnWx},</if>
            <if test="orderBizType != null">`order_biz_type` = #{orderBizType},</if>
            <if test="merchSn != null">`merch_sn` = #{merchSn},</if>
            <if test="createTime != null">`create_time` = #{createTime},</if>
            <if test="modTime != null">`mod_time` = #{modTime},</if>
        </set>
        where id = #{id}
    </update>

    <delete id="delete">
		delete from mall_order where id = #{value}
	</delete>

    <delete id="deleteBatch">
        delete from mall_order where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

    <update id="riderOrderUpdate" parameterType="com.kmall.admin.entity.OrderEntity">
        update mall_order
        <set>
            `order_status` = #{orderStatus},
            `shipping_status` = #{shippingStatus},
            `shipping_id` = #{shippingId},
            `shipping_name` = #{shippingName},
            `shipping_fee` = #{shippingFee},
            `shipping_no` = #{shippingNo},
            `shipping_mobile` = #{shippingMobile}
        </set>
        where id = #{id}
    </update>

    <select id="getYfkOrderUserSum" resultType="int">
        select count(1) from (select o.user_id,count(o.user_id) as counts from mall_order o
        inner join mall_merch_user mu on o.user_id=mu.user_id and o.merch_sn=mu.merch_sn and o.store_id=mu.store_id
        left join mall_store s on o.store_id = s.id
        where pay_status = 2
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        group by o.user_id) u
    </select>
    <select id="getOderUserSum" resultType="int">
        select count(1) from (select o.user_id,count(o.user_id) as counts from mall_order o
        inner join mall_merch_user mu on o.user_id=mu.user_id and o.merch_sn=mu.merch_sn and o.store_id=mu.store_id
        left join mall_store s on o.store_id = s.id
        where 1=1
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
        group by o.user_id) u
    </select>
    <select id="getTodayUserOrder" resultType="int">
        select count(1) from mall_order o
        left join mall_store s on o.store_id = s.id
        where pay_status = 2 and pay_time > date_format(sysdate(), '%Y-%m-%d')
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
    </select>
    <select id="getTodayUserSales" resultType="int">
        select ifnull(sum(o.actual_price),0) from mall_order o
        left join mall_store s on o.store_id = s.id  where o.pay_status = 2 and o.pay_time > date_format(sysdate(), '%Y-%m-%d')
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
    </select>
    <select id="getIncomeSum" resultType="int">
        select ifnull(sum(actual_price),0) from mall_order o
        left join mall_store s on o.store_id = s.id where o.pay_status = 2
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
    </select>
    <select id="getPayedOrderCount" resultType="int">
        select count(1) from mall_order o
        left join mall_store s on o.store_id = s.id  where o.pay_status = 2 and o.is_onffline_order = 0
        <if test="storeId != null and storeId != ''">
            AND o.store_id = #{storeId}
        </if>
        <if test="merchSn != null and merchSn.trim() != ''">
            AND o.merch_sn = #{merchSn}
        </if>
        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
            AND s.third_party_merch_code = #{thirdPartyMerchCode}
        </if>
    </select>
</mapper>