ShipmentQuantityStatisticsMapper.xml 9.16 KB
<?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.lframework.xingyun.sc.mappers.ShipmentQuantityStatisticsMapper">

    <resultMap id="ShipmentQuantityStatisticsDto" type="com.lframework.xingyun.sc.dto.statistics.ShipmentQuantityStatisticsDto">
        <result column="shipment_date" property="shipmentDate"/>
        <result column="dept_id" property="deptId"/>
        <result column="dept_code" property="deptCode"/>
        <result column="dept_name" property="deptName"/>
        <result column="workshop_id" property="workshopId"/>
        <result column="workshop_code" property="workshopCode"/>
        <result column="workshop_name" property="workshopName"/>
        <result column="shipment_quantity" property="shipmentQuantity"/>
    </resultMap>

    <resultMap id="ShipmentQuantityStatisticsDateRangeDto" type="com.lframework.xingyun.sc.dto.statistics.ShipmentQuantityStatisticsDateRangeDto">
        <result column="start_date" property="startDate"/>
        <result column="end_date" property="endDate"/>
    </resultMap>

    <resultMap id="ShipmentQuantityStatisticsInvalidDto" type="com.lframework.xingyun.sc.dto.statistics.ShipmentQuantityStatisticsInvalidDto">
        <result column="order_id" property="orderId"/>
        <result column="order_no" property="orderNo"/>
        <result column="line_id" property="lineId"/>
        <result column="shipment_date" property="shipmentDate"/>
        <result column="dept_id" property="deptId"/>
        <result column="workshop_id" property="workshopId"/>
        <result column="quantity" property="quantity"/>
    </resultMap>

    <sql id="ShipmentQuantityStatistics_base_where">
        o.type = 'PRODUCTION'
        AND o.examine_status = 'PASS'
        AND (o.status IS NULL OR o.status != 'CANCEL')
        AND (ol.del_flag IS NULL OR ol.del_flag = 0)
    </sql>

    <select id="query" resultMap="ShipmentQuantityStatisticsDto">
            SELECT
                t.shipment_date,
                t.dept_id,
                t.dept_code,
                t.dept_code,
                t.dept_name,
                t.workshop_id,
                t.workshop_code,
                t.shipment_quantity
            FROM (
                SELECT
                    ol.delivery_date AS shipment_date,
                    o.dept_id AS dept_id,
                    sd.code AS dept_code,
                    sd.name AS dept_name,
                    o.workshop_id AS workshop_id,
                    ws.code AS workshop_code,
                    ws.name AS workshop_name,
                    SUM(ol.quantity) AS shipment_quantity
                FROM tbl_purchase_order_line ol
                INNER JOIN purchase_order_info o ON o.id = ol.purchase_order_id
                LEFT JOIN sys_dept sd ON sd.id = o.dept_id
                LEFT JOIN base_data_workshop ws ON ws.id = o.workshop_id
                WHERE
                    <include refid="ShipmentQuantityStatistics_base_where"/>
                    AND ol.delivery_date IS NOT NULL
                    AND o.dept_id IS NOT NULL AND o.dept_id != ''
                    AND o.workshop_id IS NOT NULL AND o.workshop_id != ''
                    AND ol.quantity IS NOT NULL
                    <if test="vo.shipmentDateStart != null and vo.shipmentDateStart != ''">
                        AND ol.delivery_date <![CDATA[>=]]> #{vo.shipmentDateStart}
                    </if>
                    <if test="vo.shipmentDateEnd != null and vo.shipmentDateEnd != ''">
                        AND ol.delivery_date <![CDATA[<=]]> #{vo.shipmentDateEnd}
                    </if>
                    <if test="vo.deptId != null and vo.deptId != ''">
                        AND o.dept_id = #{vo.deptId}
                    </if>
                    <if test="vo.workshopId != null and vo.workshopId != ''">
                        AND o.workshop_id = #{vo.workshopId}
                    </if>
                GROUP BY ol.delivery_date, o.dept_id, o.workshop_id
            ) t
        ORDER BY
            t.shipment_date DESC,
            CASE t.workshop_code
                WHEN 'yfc' THEN 1
                WHEN 'efc' THEN 2
                WHEN 'sfc' THEN 3
                WHEN 'ztfc' THEN 4
                ELSE 99
            END,
            t.dept_name
    </select>

    <select id="queryDateRange" resultMap="ShipmentQuantityStatisticsDateRangeDto">
        SELECT
            MIN(t.shipment_date) AS start_date,
            MAX(t.shipment_date) AS end_date
        FROM (
            SELECT
                ol.delivery_date AS shipment_date,
                o.dept_id AS dept_id,
                o.workshop_id AS workshop_id
            FROM tbl_purchase_order_line ol
            INNER JOIN purchase_order_info o ON o.id = ol.purchase_order_id
            WHERE
                <include refid="ShipmentQuantityStatistics_base_where"/>
                AND ol.delivery_date IS NOT NULL
                AND o.dept_id IS NOT NULL AND o.dept_id != ''
                AND o.workshop_id IS NOT NULL AND o.workshop_id != ''
                AND ol.quantity IS NOT NULL
                <if test="vo.deptId != null and vo.deptId != ''">
                    AND o.dept_id = #{vo.deptId}
                </if>
                <if test="vo.workshopId != null and vo.workshopId != ''">
                    AND o.workshop_id = #{vo.workshopId}
                </if>
        ) t
    </select>

    <select id="queryDeptDimByCodes" resultMap="ShipmentQuantityStatisticsDto">
        SELECT
            d.id AS dept_id,
            d.code AS dept_code,
            d.name AS dept_name
        FROM sys_dept d
        WHERE d.code IN
        <foreach collection="codes" item="code" open="(" close=")" separator=",">
            #{code}
        </foreach>
        ORDER BY
            CASE d.code
                WHEN 'BF' THEN 1
                WHEN 'CZ' THEN 2
                WHEN 'DG' THEN 3
                WHEN 'FS' THEN 4
                WHEN 'NB' THEN 5
                WHEN 'SZ' THEN 6
                WHEN 'WZ' THEN 7
                WHEN 'ZT' THEN 8
                WHEN 'WM' THEN 9
                ELSE 99
            END,
            d.name
    </select>

    <select id="queryDeptDimById" resultMap="ShipmentQuantityStatisticsDto">
        SELECT
            d.id AS dept_id,
            d.code AS dept_code,
            d.name AS dept_name
        FROM sys_dept d
        WHERE d.id = #{deptId}
    </select>

    <select id="queryWorkshopDimByCodes" resultMap="ShipmentQuantityStatisticsDto">
        SELECT
            w.id AS workshop_id,
            w.code AS workshop_code,
            w.name AS workshop_name
        FROM base_data_workshop w
        WHERE w.code IN
        <foreach collection="codes" item="code" open="(" close=")" separator=",">
            #{code}
        </foreach>
        ORDER BY
            CASE w.code
                WHEN 'yfc' THEN 1
                WHEN 'efc' THEN 2
                WHEN 'sfc' THEN 3
                WHEN 'ztfc' THEN 4
                ELSE 99
            END,
            w.name
    </select>

    <select id="queryWorkshopDimById" resultMap="ShipmentQuantityStatisticsDto">
        SELECT
            w.id AS workshop_id,
            w.code AS workshop_code,
            w.name AS workshop_name
        FROM base_data_workshop w
        WHERE w.id = #{workshopId}
    </select>

    <select id="queryInvalid" resultMap="ShipmentQuantityStatisticsInvalidDto">
        SELECT
            t.order_id,
            t.order_no,
            t.line_id,
            t.shipment_date,
            t.dept_id,
            t.workshop_id,
            t.quantity
        FROM (
            SELECT
                o.id AS order_id,
                o.order_no AS order_no,
                ol.id AS line_id,
                ol.delivery_date AS shipment_date,
                o.dept_id AS dept_id,
                o.workshop_id AS workshop_id,
                ol.quantity AS quantity,
                o.create_time AS create_time
            FROM tbl_purchase_order_line ol
            INNER JOIN purchase_order_info o ON o.id = ol.purchase_order_id
            WHERE
                <include refid="ShipmentQuantityStatistics_base_where"/>
                AND (
                    ol.delivery_date IS NULL
                    OR o.dept_id IS NULL OR o.dept_id = ''
                    OR o.workshop_id IS NULL OR o.workshop_id = ''
                    OR ol.quantity IS NULL
                )
                <if test="vo.shipmentDateStart != null and vo.shipmentDateStart != ''">
                    AND (ol.delivery_date IS NULL OR ol.delivery_date <![CDATA[>=]]> #{vo.shipmentDateStart})
                </if>
                <if test="vo.shipmentDateEnd != null and vo.shipmentDateEnd != ''">
                    AND (ol.delivery_date IS NULL OR ol.delivery_date <![CDATA[<=]]> #{vo.shipmentDateEnd})
                </if>
                <if test="vo.deptId != null and vo.deptId != ''">
                    AND o.dept_id = #{vo.deptId}
                </if>
                <if test="vo.workshopId != null and vo.workshopId != ''">
                    AND o.workshop_id = #{vo.workshopId}
                </if>
        ) t
        ORDER BY t.create_time DESC
        LIMIT 200
    </select>
</mapper>