Переглянути джерело

修正ability下drop_device行为使其正确工作

zii 3 тижнів тому
батько
коміт
106cc3b262
1 змінених файлів з 20 додано та 17 видалено
  1. 20 17
      src/api/ability.rs

+ 20 - 17
src/api/ability.rs

@@ -201,30 +201,33 @@ pub async fn drop_device(
     //     log(Warning, format!("error: {e}"));
     //     return super::token_fail();
     // }
-    let sn = if let Some(sn) = d.sn{sn}else
-    if let Ok(sn)=state.db_lite.query(
-        "select sn from device where id=? or sn=?", 
-        [
-            if let Some(dev ) = d.device{dev}else{
-                return Json(JsonBack{errcode: 3000, errmsg: Some("参数异常: 获取设备sn失败".to_string())});
-            }
-            ], |r|{r.get::<usize,String>(0)}).await{
-        sn
-    }else{
-        return Json(JsonBack{errcode: 3000, errmsg: Some("数据库异常: 获取设备sn失败".to_string())});
-    };
+    let (did, sn) = if let Ok((id, ans))=state.db_lite.query(
+        "select id, sn from device where id=? or sn=?", 
+        (d.device, d.sn), |r|{Ok((r.get::<usize,u64>(0)?,r.get::<usize,String>(1)?))}).await{
+            (id,ans)
+        }else{
+            return Json(JsonBack{errcode: 3000, errmsg: Some("数据库异常: 获取设备sn失败".to_string())});
+        };
+    if let Err(e) = state.db_lite.execute("update device set belongto=0 where sn=?", [sn.clone()]).await{
+        return Json(JsonBack{errcode: 3000, errmsg: Some(format!("数据库异常: 移除设备从属失败{e}"))});
+    }
     let mut sqls=Vec::new();
     let params = if let Ok(mqids) = state.db_lite.query_rows(
-        "select u.mqid from map_user_device m left join user u on u.id=m.did where m.did=?", 
-        [d.device], 
-        |r|{sqls.push("?");r.get::<usize,String>(0)}).await{mqids}else{return Json(JsonBack{errcode:3000,errmsg:Some("数据库异常: 获取用户mqtt-clientid失败".to_string())})};
+        "select u.mqid from map_user_device m left join user u on u.id=m.uid where m.did=?", 
+        [did], 
+        |r|{sqls.push("?");r.get::<usize,String>(0)}).await{
+            mqids
+        }else{
+            return Json(JsonBack{errcode:3000,errmsg:Some("数据库异常: 获取用户mqtt-clientid失败".to_string())})
+        };
     
-    if let Err(e) = state.db_lite.execute("delete from map_user_device where did=?", [d.device]).await{log(Warning, format!("error: {e}"))}
+    if let Err(e) = state.db_lite.execute("delete from map_user_device where did=?", [did]).await{log(Warning, format!("error: {e}"))}
 
-    if let Err(e) = state.db_lite.execute("update device set belongto=0 where did=?", [d.device]).await{log(Warning, format!("error: {e}"))}
+    if let Err(e) = state.db_lite.execute("update device set belongto=0 where did=?", [did]).await{log(Warning, format!("error: {e}"))}
 
     match state.mq_detail{
         Some(s) => {
+            log(Debug, format!("正在执行删除{sn}, {:?}",params));
             match s.db_mq_map.execute(
                 format!("delete from sub where clientid in ({}) and topic in (?,?)",sqls.join(",")).as_str(), 
                 rusqlite::params_from_iter({