陶杰
2024-12-04 efb6f9d656f72c3016d738f079c92de021b9f14f
src/main/resources/mapper/payment/DeliveryOrderMapper.xml
@@ -17,11 +17,17 @@
                #{item}
            </foreach>
        </if>
<!--        <if test="condition.startDate != null">-->
<!--            AND q.create_time &gt; #{condition.startDate}-->
<!--        </if>-->
<!--        <if test="condition.endDate != null">-->
<!--            AND q.create_time &lt;= #{condition.endDate}-->
<!--        </if>-->
        <if test="condition.startDate != null">
            AND q.create_time &gt; #{condition.startDate}
            AND o.payment_time &gt; #{condition.startDate}
        </if>
        <if test="condition.endDate != null">
            AND q.create_time &lt;= #{condition.endDate}
            AND o.payment_time &lt;= #{condition.endDate}
        </if>
        ORDER BY o.payment_time
    </select>
@@ -79,13 +85,16 @@
    </select>
    <select id="selectSupplierDoList4Check" resultType="com.mzl.flower.dto.response.payment.DeliveryOrderList4CheckDTO">
        SELECT tt.id, tt.supplierName, tt.supplierTel, tt.stationName, sum(tt.num) totalNum, sum(tt.amount) totalAmount
        SELECT tt.id, tt.supplierName, tt.supplierTel, tt.stationName, sum(tt.num) totalNum
            , sum(tt.amount) totalAmount, sum(tt.uncheckedCount) uncheckedCount
        from (
            select s.id, s.name supplierName, s.contact_tel supplierTel, st.name stationName
            , (select sum(num) from t_order_item oi
                where oi.supplier_id = q.supplier_id and oi.order_id = q.order_id) num
            ,  (select sum(oi.supplier_price * oi.num) from t_order_item oi
            , (select sum(oi.supplier_price * oi.num) from t_order_item oi
                where oi.supplier_id = q.supplier_id and oi.order_id = q.order_id) amount
            , (select count(1) from t_delivery_order dor
                where dor.id = q.id and dor.status != 'CHECKED') uncheckedCount
            from t_supplier_info s
            join t_station st on st.id = s.station_id
            join t_delivery_order q on s.id = q.supplier_id
@@ -98,8 +107,12 @@
        <if test="condition.orderNo != null and condition.orderNo != ''">
            AND q.order_no LIKE concat('%', #{condition.orderNo},'%')
        </if>
        <if test="condition.status != null and condition.status != ''">
            AND q.status = #{condition.status}
        <if test="condition.statusList != null and condition.statusList.size > 0">
            AND q.status in
            <foreach collection="condition.statusList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="condition.supplierId != null">
@@ -123,11 +136,17 @@
            AND o.warehouse_location_code LIKE concat('%', #{condition.warehouseLocationCode},'%')
        </if>
<!--        <if test="condition.startDate != null">-->
<!--            AND q.create_time &gt; #{condition.startDate}-->
<!--        </if>-->
<!--        <if test="condition.endDate != null">-->
<!--            AND q.create_time &lt;= #{condition.endDate}-->
<!--        </if>-->
        <if test="condition.startDate != null">
            AND q.create_time &gt; #{condition.startDate}
            AND o.payment_time &gt; #{condition.startDate}
        </if>
        <if test="condition.endDate != null">
            AND q.create_time &lt;= #{condition.endDate}
            AND o.payment_time &lt;= #{condition.endDate}
        </if>
        ) tt
        GROUP BY tt.id, tt.supplierName, tt.supplierTel, tt.stationName
@@ -148,8 +167,12 @@
        <if test="condition.orderNo != null and condition.orderNo != ''">
            AND q.order_no LIKE concat('%', #{condition.orderNo},'%')
        </if>
        <if test="condition.status != null and condition.status != ''">
            AND q.status = #{condition.status}
        <if test="condition.statusList != null and condition.statusList.size > 0">
            AND q.status in
            <foreach collection="condition.statusList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        <if test="condition.warehouseId != null">
@@ -166,51 +189,68 @@
            AND o.warehouse_location_code LIKE concat('%', #{condition.warehouseLocationCode},'%')
        </if>
<!--        <if test="condition.startDate != null">-->
<!--            AND q.create_time &gt; #{condition.startDate}-->
<!--        </if>-->
<!--        <if test="condition.endDate != null">-->
<!--            AND q.create_time &lt;= #{condition.endDate}-->
<!--        </if>-->
        <if test="condition.startDate != null">
            AND q.create_time &gt; #{condition.startDate}
            AND o.payment_time &gt; #{condition.startDate}
        </if>
        <if test="condition.endDate != null">
            AND q.create_time &lt;= #{condition.endDate}
            AND o.payment_time &lt;= #{condition.endDate}
        </if>
        ORDER BY q.arrive_time
    </select>
    <select id="statisticStationList" resultType="com.mzl.flower.dto.response.flower.StationStatisticDTO">
            SELECT
                s.station_id AS stationId,
                st.`name`,
                SUM( oi.num ) AS totalNum
            FROM
            t_delivery_order o
            LEFT JOIN t_delivery_order_item i ON o.id = i.delivery_id
            LEFT JOIN t_order_item oi ON oi.id = i.order_item_id
            LEFT JOIN t_supplier_info s ON s.id = o.supplier_id
            LEFT JOIN t_station st ON st.id = s.station_id
            LEFT JOIN t_order t ON t.id = i.order_id
            WHERE o.deleted = 0
            AND o.`status` IN ( 'PENDING', 'ARRIVED', 'CHECKED' )
            <if test="userId !=null and userId !=''">
                AND st.user_ids LIKE concat('%', #{userId},'%')
            </if>
            <if test="name !=null and name !=''">
                AND ( s.id LIKE concat('%', #{name},'%')  OR
                      s.contact_tel LIKE concat('%', #{name},'%') OR
                      s.`name` LIKE concat('%', #{name},'%') OR
                      st.`name` LIKE concat('%', #{name},'%') OR
                      t.warehouse_location_code LIKE concat('%', #{name},'%')
                    )
            </if>
            <if test="startDate != null">
                AND o.create_time &gt; #{startDate}
            </if>
            <if test="endDate != null">
                AND o.create_time &lt;= #{endDate}
            </if>
            GROUP BY
            s.station_id,
            st.`name`;
        SELECT
        s.station_id AS stationId,
        st.`name`,
        SUM( oi.num ) AS totalNum,
        SUM(CASE WHEN  o.`status` = 'CHECKED'  THEN oi.num ELSE 0 END) AS checkedSupplierCount,
        SUM(CASE WHEN  o.`status` = 'PENDING' or o.`status`= 'ARRIVED' THEN oi.num ELSE 0 END) AS uncheckedSupplierCount
        FROM t_delivery_order o
        LEFT JOIN t_delivery_order_item i ON o.id = i.delivery_id
        LEFT JOIN t_order_item oi ON oi.id = i.order_item_id
        LEFT JOIN t_supplier_info s ON s.id = o.supplier_id
        LEFT JOIN t_station st ON st.id = s.station_id
        LEFT JOIN t_order t ON t.id = i.order_id
        WHERE o.deleted = 0
        AND o.`status` IN ( 'PENDING', 'ARRIVED', 'CHECKED' )
        <if test="userId !=null and userId !=''">
            AND st.user_ids LIKE concat('%', #{userId},'%')
        </if>
        <if test="name !=null and name !=''">
            AND ( s.id LIKE concat('%', #{name},'%')  OR
            s.contact_tel LIKE concat('%', #{name},'%') OR
            s.`name` LIKE concat('%', #{name},'%') OR
            st.`name` LIKE concat('%', #{name},'%') OR
            t.warehouse_location_code LIKE concat('%', #{name},'%')
            )
        </if>
<!--        <if test="startDate != null">-->
<!--            AND o.create_time &gt; #{startDate}-->
<!--        </if>-->
<!--        <if test="endDate != null">-->
<!--            AND o.create_time &lt;= #{endDate}-->
<!--        </if>-->
        <if test="startDate != null">
            AND t.payment_time &gt; #{startDate}
        </if>
        <if test="endDate != null">
            AND t.payment_time &lt;= #{endDate}
        </if>
        <if test="statusList != null and statusList.size > 0">
            AND o.status in
            <foreach collection="statusList" item="status" open="(" separator="," close=")">
                #{status}
            </foreach>
        </if>
        GROUP BY s.station_id, st.`name`
    </select>
    <update id="setDeliveryOrderPending">
@@ -225,9 +265,13 @@
        SELECT q.*
        FROM t_delivery_order q
        WHERE q.deleted = 0
        and q.status in ('PENDING', 'ARRIVED', 'CHECKED')
        AND q.status in ('PENDING', 'ARRIVED')
        AND q.supplier_id = #{supplierId}
        AND q.create_time &gt; #{startDate}
        AND q.create_time &lt;= #{endDate}
        <if test="startDate != null">
            AND q.create_time &gt; #{startDate}
        </if>
        <if test="endDate != null">
            AND q.create_time &lt;= #{endDate}
        </if>
    </select>
</mapper>