use crate::common::error::Result;
use crate::model::sys::model::{
msys_job::SysJobModel,
msys_job_log::{JobLogAdd, SysJobLogModel},
};
use crate::service::sys::{s_sys_api_permission, s_sys_white_jwt};
use crate::worker::common::{Worker, WorkerOpts};
use crate::worker::AppWorker;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Default, Debug)]
pub struct InvokeFunctionMsg {
pub job_id: Option<i64>,
pub callfun: String,
pub parmets: String,
}
#[derive(Clone)]
pub struct InvokeFunctionWorker {}
impl AppWorker<InvokeFunctionMsg> for InvokeFunctionWorker {
fn new() -> Self {
Self {}
}
}
#[async_trait]
impl Worker<InvokeFunctionMsg> for InvokeFunctionWorker {
fn opts() -> WorkerOpts<InvokeFunctionMsg, Self> {
WorkerOpts::new().queue("default")
}
async fn perform(&self, arg: InvokeFunctionMsg) -> Result<()> {
let message = match arg.callfun.as_str() {
"updateapi" => s_sys_api_permission::update_all_api(arg.parmets).await,
"clearuserinfo" => s_sys_white_jwt::clear_user_info().await,
_ => Ok("未找到对应的方法".to_string()),
};
if let Some(job_id) = arg.job_id {
let runcount = SysJobModel::updata_run_count(job_id).await.unwrap_or(0);
let mut jog_add = JobLogAdd {
job_id,
run_count: runcount,
..Default::default()
};
match message {
Ok(r) => {
let txt = r;
jog_add.job_message = Some(if txt.len() > 2048 {
let truncated = &txt[..2000];
format!("{truncated} ...数据太长,不记录完整内容。")
} else {
txt
});
jog_add.status.clone_from(&"Sucess".to_owned());
}
Err(e) => {
let txt = e.to_string();
jog_add.job_message = Some(if txt.len() > 2048 {
let truncated = &txt[..2000];
format!("{truncated} ...数据太长,不记录完整内容。")
} else {
txt
});
jog_add.status.clone_from(&"Failed".to_owned());
}
};
let _ = SysJobLogModel::add(jog_add).await;
}
Ok(())
}
}