a-cloud-all/.devops/cleanup_orphaned_aircrafts.sh

154 lines
4.4 KiB
Bash

#!/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 "=========================================="