|
|
@@ -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({
|