ZengTao
2025-05-12 21887ddd12bdba4e2b00456c94a3cb8e1568c000
hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml
@@ -136,6 +136,167 @@
                                                     t6.product_date
        order by t.date
    </select>
    <select id="exportDailyProduction" resultType="com.mes.largenscreen.entity.DailyProductionData">
        with edg_storage_history_temp as (
            select t.glass_id_in as glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
            from edg_storage_device_task_history t
            where t.task_type in
                  (1, 3)
              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
        )
           , big_storage_cage_history_temp as (
            select t.glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
            from big_storage_cage_history_task t
            where t.task_type = 2
              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
        )
           , hollow_big_storage_cage_history_temp as (
            select t.glass_id, t.create_time, STR_TO_DATE(t.create_time, '%Y-%m-%d') as product_date
            from hollow_big_storage_cage_history_task t
            where t.task_type = 5
              and STR_TO_DATE(t.create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
        )
           , engineer_temp as (
            select STR_TO_DATE(create_time, '%Y-%m-%d') as product_date, engineer_id, glass_total, glass_total_area
            from engineering
            where STR_TO_DATE(create_time, '%Y-%m-%d') BETWEEN #{beginDate} and #{endDate}
        )
           , edg_temp as (
            select t.product_date,
                   count(t.glass_id)                             as
                                                                    count_out,
                   round(sum(t1.width * t1.height) / 1000000, 1) as total_area_out
            from edg_storage_history_temp t
                     inner join glass_info t1 on t.glass_id = t1.glass_id
            group by product_date
        )
           , edg_time_one as (
            select product_date,
                   min(create_time)                                          as edg_begin_time,
                   max(create_time)                                          as edg_end_time,
                   TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS edg_time_total
            from edg_storage_history_temp
            group by product_date
        )
           , edg_time_two as (
            SELECT t1.product_date,
                   sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)) AS edg_time_free
            FROM (SELECT product_date,
                         create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM edg_storage_history_temp
                 ) t1
                     JOIN
                 (SELECT create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM edg_storage_history_temp) t2 ON t1.next_timestamp = t2.create_time
            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 6 and 500
            group by t1.product_date
        )
           , big_storage_temp as (
            select t.product_date,
                   count(distinct t1.engineer_id, t1.tempering_layout_id) as tempering_layout_count,
                   count(distinct t1.glass_id)                            as tempering_glass_count,
                   round(sum(t1.width * t1.height) / 1000000, 1)          as tempering_area
            from big_storage_cage_history_temp t
                     inner join glass_info t1
                                on t.glass_id = t1.glass_id
            group by t.product_date
        )
           , big_storage_time_base as (
            select distinct product_date, create_time from big_storage_cage_history_temp
        )
           , big_storage_time_one as (select product_date,
                                             min(create_time)                                          as big_begin_time,
                                             max(create_time)                                          as big_end_time,
                                             TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS big_time_total
                                      from big_storage_time_base
                                      group by product_date)
           , big_storage_time_two as (
            SELECT t1.product_date,
                   IFNULL(sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)), 0) AS big_time_free
            FROM (SELECT product_date,
                         create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM big_storage_time_base) t1
                     JOIN
                 (SELECT create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM big_storage_time_base) t2 ON t1.next_timestamp = t2.create_time
            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 11 and 500
            group by t1.product_date
        )
           , hollow_big_storage_temp as (
            select t.product_date,
                   count(distinct t1.glass_id)                   as hollow_glass_count,
                   round(sum(t1.width * t1.height) / 1000000, 1) as hollow_area
            from hollow_big_storage_cage_history_temp t
                     inner join glass_info t1
                                on t.glass_id = t1.glass_id
            group by t.product_date
        )
           , hollow_big_storage_time_base as (
            select distinct product_date, create_time from hollow_big_storage_cage_history_temp
        )
           , hollow_big_storage_time_one as (select product_date,
                                                    min(create_time)                                          as hollow_begin_time,
                                                    max(create_time)                                          as hollow_end_time,
                                                    TIMESTAMPDIFF(MINUTE, min(create_time), max(create_time)) AS hollow_time_total
                                             from hollow_big_storage_time_base
                                             group by product_date)
           , hollow_big_storage_time_two as (
            SELECT t1.product_date,
                   IFNULL(sum(TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time)), 0) AS hollow_time_free
            FROM (SELECT product_date,
                         create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM hollow_big_storage_time_base) t1
                     JOIN
                 (SELECT create_time,
                         LEAD(create_time) OVER (ORDER BY create_time) AS next_timestamp
                  FROM hollow_big_storage_time_base) t2 ON t1.next_timestamp = t2.create_time
            WHERE TIMESTAMPDIFF(MINUTE, t1.create_time, t2.create_time) between 11 and 500
            group by t1.product_date
        )
           , result as (
            select t.count_out,
                   t.total_area_out,
                   t1.*,
                   t2.edg_time_free,
                   t1.edg_time_total - t2.edg_time_free       as edg_time_diff,
                   t3.tempering_layout_count,
                   t3.tempering_glass_count,
                   t3.tempering_area,
                   t4.big_begin_time,
                   t4.big_end_time,
                   t4.big_time_total,
                   t5.big_time_free,
                   t4.big_time_total - t5.big_time_free       as big_time_diff,
                   t6.hollow_glass_count,
                   t6.hollow_area,
                   t7.hollow_begin_time,
                   t7.hollow_end_time,
                   t7.hollow_time_total,
                   t8.hollow_time_free,
                   t7.hollow_time_total - t8.hollow_time_free as hollow_time_diff,
                   t9.engineer_id,
                   t9.glass_total,
                   t9.glass_total_area
            from edg_temp t
                     LEFT JOIN edg_time_one t1 on t.product_date = t1.product_date
                     LEFT JOIN edg_time_two t2 on t.product_date = t2.product_date
                     LEFT JOIN big_storage_temp t3 on t.product_date = t3.product_date
                     LEFT JOIN big_storage_time_one t4 on t.product_date = t4.product_date
                     LEFT JOIN big_storage_time_two t5 on t.product_date = t5.product_date
                     LEFT JOIN hollow_big_storage_temp t6 on t.product_date = t6.product_date
                     LEFT JOIN hollow_big_storage_time_one t7 on t.product_date = t7.product_date
                     LEFT JOIN hollow_big_storage_time_two t8 on t.product_date = t8.product_date
                     LEFT JOIN engineer_temp t9 on t.product_date = t9.product_date
        )
        select *
        from result
        order by product_date
    </select>
</mapper>