select po.id as productionOrderId, po.nps_no as npsNo, po.is_end_order as endOrder, p.product_name as productName, pm.model as model, pm.unit as unit, group_concat(distinct poro.operation_name order by poro.drag_sort, poro.operation_name separator ',') as operationName, count(distinct pot.id) as productionTaskCount, sum(ifnull(pot.plan_quantity, 0)) as planQuantity, sum(ifnull(pot.complete_quantity, 0)) as completeQuantity, sum(ifnull(pot.complete_quantity, 0)) as goodQuantity, sum(ifnull(scrapStat.scrapQty, 0)) as scrapQty, round(sum(ifnull(pot.complete_quantity, 0)) / nullif(sum(ifnull(pot.plan_quantity, 0)), 0) * 100, 2) as completionStatus, max(poro.type) as type, case when sum(case when pot.work_order_no like 'FG%' then 1 else 0 end) > 0 then '返工返修' else '正常' end as workOrderType, group_concat(distinct pot.work_order_no order by pot.work_order_no separator ',') as workOrderNo, min(pot.plan_start_time) as planStartTime, max(pot.plan_end_time) as planEndTime, min(pot.actual_start_time) as actualStartTime, max(pot.actual_end_time) as actualEndTime, max(pot.status) as status from production_operation_task pot left join production_order po on pot.production_order_id = po.id left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id) left join product p on pm.product_id = p.id left join ( select ppm.production_operation_task_id as taskId, sum(ifnull(ppo.scrap_qty, 0)) as scrapQty from production_product_main ppm left join production_product_output ppo on ppo.production_product_main_id = ppm.id group by ppm.production_operation_task_id ) scrapStat on scrapStat.taskId = pot.id and po.nps_no like concat('%', #{c.npsNo}, '%') and pot.production_order_id = #{c.productionOrderId}