#!/bin/bash # ============================================================ # 清理没有关联机场的大疆无人机 # ============================================================ set -e echo "==========================================" echo "清理没有关联机场的大疆无人机" echo "==========================================" # 数据库配置 DB_CONTAINER="ruoyi-mysql" DB_USER="root" DB_PASSWORD="password" DB_NAME="ry-cloud" echo "" echo "第一步:查询所有大疆无人机(用于确认)" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " SELECT a.aircraft_id, a.aircraft_name, d.device_manufacturer, d.device_sn FROM device_aircraft a LEFT JOIN device_device d ON a.device_id = d.device_id WHERE d.device_manufacturer = 'dajiang' ORDER BY a.aircraft_id; " echo "" echo "第二步:查询没有关联机场的大疆无人机" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " SELECT a.aircraft_id, a.aircraft_name, d.device_manufacturer, d.device_sn, d.iot_device_id FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id LEFT JOIN device_dock_aircraft da ON a.aircraft_id = da.aircraft_id WHERE d.device_manufacturer = 'dajiang' AND da.id IS NULL ORDER BY a.aircraft_id; " echo "" echo "==========================================" echo "即将删除以上无人机记录" echo "请确认是否继续?(y/n)" read -r confirm if [[ ! $confirm =~ ^[Yy]$ ]]; then echo "操作已取消" exit 0 fi echo "" echo "第三步:删除无人机挂载关联表中的记录" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " DELETE FROM device_aircraft_payload WHERE aircraft_id IN ( SELECT a.aircraft_id FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id LEFT JOIN device_dock_aircraft da ON a.aircraft_id = da.aircraft_id WHERE d.device_manufacturer = 'dajiang' AND da.id IS NULL ); " echo "无人机挂载关联记录删除完成" echo "" echo "第四步:删除机场无人机关联表中的记录" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " DELETE FROM device_dock_aircraft WHERE aircraft_id IN ( SELECT a.aircraft_id FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id LEFT JOIN device_dock_aircraft da ON a.aircraft_id = da.aircraft_id WHERE d.device_manufacturer = 'dajiang' AND da.id IS NULL ); " echo "机场无人机关联记录删除完成" echo "" echo "第五步:删除无人机表中的记录" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " DELETE FROM device_aircraft WHERE aircraft_id IN ( SELECT temp.aircraft_id FROM ( SELECT a.aircraft_id FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id LEFT JOIN device_dock_aircraft da ON a.aircraft_id = da.aircraft_id WHERE d.device_manufacturer = 'dajiang' AND da.id IS NULL ) AS temp ); " echo "无人机记录删除完成" echo "" echo "第六步:验证删除结果" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " SELECT a.aircraft_id, a.aircraft_name, d.device_manufacturer, d.device_sn FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id WHERE d.device_manufacturer = 'dajiang' ORDER BY a.aircraft_id; " echo "" echo "统计验证:" echo "==========================================" docker exec ${DB_CONTAINER} mysql -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e " SELECT '大疆无人机总数' AS statistic_name, COUNT(*) AS count FROM device_aircraft a INNER JOIN device_device d ON a.device_id = d.device_id WHERE d.device_manufacturer = 'dajiang' UNION ALL SELECT '大疆机场总数' AS statistic_name, COUNT(*) AS count FROM device_dock dock INNER JOIN device_device d ON dock.device_id = d.device_id WHERE d.device_manufacturer = 'dajiang'; " echo "" echo "==========================================" echo "清理完成" echo "=========================================="