什么情况之前调整好的逻辑怎么全乱了。。。。。

This commit is contained in:
Yakumo Hokori
2025-07-16 15:15:14 +08:00
parent 98922a9851
commit 8ee11d7e53
2 changed files with 87 additions and 63 deletions

View File

@@ -257,14 +257,7 @@ async fn insert_workorder(code: String, n2n: String, q: String, a: String) -> Re
}
#[tauri::command]
async fn feedback_workorder(gdid: String, messagea: String) -> Result<(), String> {
// Step 1: Call the remote feedback service
let cookie = COOKIE_STORAGE.lock().unwrap().clone().ok_or("未找到登录Cookie")?;
tms_service::feedback(&cookie, &messagea, &gdid)
.await
.map_err(|e| format!("远程反馈失败: {}", e))?;
// Step 2: If remote feedback is successful, update the local database
async fn feedback_workorder(gdid: String) -> Result<(), String> {
let username = USERNAME_STORAGE.lock().unwrap().clone().ok_or("用户未登录".to_string())?;
let db_url = "postgres://tmstools:521707@honulla.com:5432/tmstools";
let (mut client, connection) = tokio_postgres::connect(db_url, NoTls)
@@ -277,13 +270,25 @@ async fn feedback_workorder(gdid: String, messagea: String) -> Result<(), String
}
});
// 从数据库获取反馈信息
let row = client.query_one(&format!("SELECT a FROM \"{}\" WHERE code = $1", username), &[&gdid])
.await
.map_err(|e| format!("查询反馈信息失败: {}", e))?;
let messagea: String = row.get(0);
// 调用远程反馈服务
let cookie = COOKIE_STORAGE.lock().unwrap().clone().ok_or("未找到登录Cookie")?;
tms_service::feedback(&cookie, &messagea, &gdid)
.await
.map_err(|e| format!("远程反馈失败: {}", e))?;
// 更新数据库
let query = format!(
"UPDATE \"{}\" SET a = $1, isfeedback = 1 WHERE code = $2",
"UPDATE \"{}\" SET isfeedback = 1 WHERE code = $1",
username
);
client
.execute(&query, &[&messagea, &gdid])
.execute(&query, &[&gdid])
.await
.map_err(|e| format!("更新数据库失败: {}", e))?;
@@ -291,7 +296,7 @@ async fn feedback_workorder(gdid: String, messagea: String) -> Result<(), String
}
#[tauri::command]
async fn feedback_today_workorders(messagea: String) -> Result<String, String> {
async fn feedback_today_workorders() -> Result<String, String> {
let username = USERNAME_STORAGE.lock().unwrap().clone().ok_or("用户未登录".to_string())?;
let cookie = COOKIE_STORAGE.lock().unwrap().clone().ok_or("未找到登录Cookie")?;
let db_url = "postgres://tmstools:521707@honulla.com:5432/tmstools";
@@ -306,7 +311,7 @@ async fn feedback_today_workorders(messagea: String) -> Result<String, String> {
});
let query_today_unfeedbacked = format!(
"SELECT code FROM \"{}\" WHERE (time AT TIME ZONE 'Asia/Shanghai')::date = (NOW() AT TIME ZONE 'Asia/Shanghai')::date AND isfeedback = 0",
"SELECT code, a FROM \"{}\" WHERE time >= date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') AND time < date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') + interval '1 day' AND isfeedback = 0",
username
);
@@ -321,15 +326,16 @@ async fn feedback_today_workorders(messagea: String) -> Result<String, String> {
for row in rows {
sleep(Duration::from_millis(200)).await;
let gdid: String = row.get(0);
let messagea: String = row.get(1);
if !messagea.is_empty() {
match tms_service::feedback(&cookie, &messagea, &gdid).await {
Ok(_) => {
let update_query = format!(
"UPDATE \"{}\" SET isfeedback = 1, a = $1 WHERE code = $2",
"UPDATE \"{}\" SET isfeedback = 1 WHERE code = $1",
username
);
if client.execute(&update_query, &[&messagea, &gdid]).await.is_ok() {
if client.execute(&update_query, &[&gdid]).await.is_ok() {
success_count += 1;
}
}
@@ -344,7 +350,7 @@ async fn feedback_today_workorders(messagea: String) -> Result<String, String> {
}
#[tauri::command]
async fn feedback_selected_workorders(gdids: Vec<String>, messagea: String) -> Result<String, String> {
async fn feedback_selected_workorders(gdids: Vec<String>) -> Result<String, String> {
let username = USERNAME_STORAGE.lock().unwrap().clone().ok_or("用户未登录".to_string())?;
let cookie = COOKIE_STORAGE.lock().unwrap().clone().ok_or("未找到登录Cookie")?;
let db_url = "postgres://tmstools:521707@honulla.com:5432/tmstools";
@@ -363,14 +369,19 @@ async fn feedback_selected_workorders(gdids: Vec<String>, messagea: String) -> R
for gdid in gdids {
sleep(Duration::from_millis(200)).await;
let row = client.query_one(&format!("SELECT a FROM \"{}\" WHERE code = $1", username), &[&gdid])
.await
.map_err(|e| format!("查询反馈信息失败: {}", e))?;
let messagea: String = row.get(0);
if !messagea.is_empty() {
match tms_service::feedback(&cookie, &messagea, &gdid).await {
Ok(_) => {
let update_query = format!(
"UPDATE \"{}\" SET isfeedback = 1, a = $1 WHERE code = $2",
"UPDATE \"{}\" SET isfeedback = 1 WHERE code = $1",
username
);
if client.execute(&update_query, &[&messagea, &gdid]).await.is_ok() {
if client.execute(&update_query, &[&gdid]).await.is_ok() {
success_count += 1;
}
}
@@ -434,7 +445,7 @@ async fn close_today_workorders() -> Result<String, String> {
});
let query_today_unclosed = format!(
"SELECT code FROM \"{}\" WHERE (time AT TIME ZONE 'Asia/Shanghai')::date = (NOW() AT TIME ZONE 'Asia/Shanghai')::date AND isclose = 0",
"SELECT code FROM \"{}\" WHERE time >= date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') AND time < date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') + interval '1 day' AND isclose = 0",
username
);
@@ -498,7 +509,7 @@ async fn close_selected_workorders(gdids: Vec<String>) -> Result<String, String>
}
#[tauri::command]
async fn feedback_and_close_today_workorders(messagea: String) -> Result<String, String> {
async fn feedback_and_close_today_workorders() -> Result<String, String> {
let username = USERNAME_STORAGE.lock().unwrap().clone().ok_or("用户未登录".to_string())?;
let cookie = COOKIE_STORAGE.lock().unwrap().clone().ok_or("未找到登录Cookie")?;
let db_url = "postgres://tmstools:521707@honulla.com:5432/tmstools";
@@ -512,15 +523,15 @@ async fn feedback_and_close_today_workorders(messagea: String) -> Result<String,
}
});
let query_today = format!(
"SELECT code, isfeedback, isclose FROM \"{}\" WHERE (time AT TIME ZONE 'Asia/Shanghai')::date = (NOW() AT TIME ZONE 'Asia/Shanghai')::date",
let query_today_unprocessed = format!(
"SELECT code, a FROM \"{}\" WHERE time >= date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') AND time < date_trunc('day', now() AT TIME ZONE 'Asia/Shanghai') + interval '1 day' AND (isfeedback = 0 OR isclose = 0)",
username
);
let rows = client
.query(&query_today, &[])
.query(&query_today_unprocessed, &[])
.await
.map_err(|e| format!("查询今日工单失败: {}", e))?;
.map_err(|e| format!("查询今日未处理工单失败: {}", e))?;
let mut feedback_success_count = 0;
let mut close_success_count = 0;
@@ -529,33 +540,34 @@ async fn feedback_and_close_today_workorders(messagea: String) -> Result<String,
for row in rows {
sleep(Duration::from_millis(200)).await;
let gdid: String = row.get(0);
let isfeedback: i32 = row.get(1);
let isclose: i32 = row.get(2);
let messagea: Option<String> = row.get(1);
if isfeedback != 1 && !messagea.is_empty() {
if tms_service::feedback(&cookie, &messagea, &gdid).await.is_ok() {
let update_query = format!(
"UPDATE \"{}\" SET isfeedback = 1, a = $1 WHERE code = $2",
// Feedback
if let Some(msg) = messagea {
if !msg.is_empty() {
if tms_service::feedback(&cookie, &msg, &gdid).await.is_ok() {
let update_feedback_query = format!(
"UPDATE \"{}\" SET isfeedback = 1 WHERE code = $1",
username
);
if client.execute(&update_query, &[&messagea, &gdid]).await.is_ok() {
if client.execute(&update_feedback_query, &[&gdid]).await.is_ok() {
feedback_success_count += 1;
}
}
}
}
if isclose != 1 {
// Close
if tms_service::close(&cookie, &gdid).await.is_ok() {
let update_query = format!(
let update_close_query = format!(
"UPDATE \"{}\" SET isclose = 1 WHERE code = $1",
username
);
if client.execute(&update_query, &[&gdid]).await.is_ok() {
if client.execute(&update_close_query, &[&gdid]).await.is_ok() {
close_success_count += 1;
}
}
}
}
Ok(format!("成功反馈 {}/{} 个, 成功关闭 {}/{}", feedback_success_count, total_count, close_success_count, total_count))
}

View File

@@ -27,14 +27,12 @@
<el-input v-model="form.contact" :disabled="isCreating" />
</el-form-item>
<el-form-item label="工号">
<el-input v-model="form.gh" disabled />
<el-input v-model="form.gh" :disabled="isCreating" />
</el-form-item>
<el-form-item label="工单ID">
<el-input v-model="form.gdID" :disabled="isCreating" />
</el-form-item>
<el-form-item label="反馈">
<el-input v-model="form.messageA" type="textarea" :rows="3" :disabled="isCreating" />
</el-form-item>
<el-form-item>
<div class="form-buttons">
<el-button type="primary" @click="createWorkOrder" :disabled="isCreating">创建工单</el-button>
@@ -196,6 +194,11 @@ async function createWorkOrder() {
});
log.value += '工单成功写入数据库。\n';
form.gdID = code;
form.n2nip = '';
form.messageQ = '';
form.contact = '';
form.messageA = '';
await fetchWorkOrders();
} catch (error) {
log.value += `创建工单过程中出错: ${error}\n`;
@@ -228,13 +231,16 @@ async function feedbackSingleWorkOrder() {
log.value += '请输入要反馈的工单ID\n';
return;
}
isCreating.value = true;
log.value += `开始反馈工单 ${form.gdID}...\n`;
try {
await invoke('feedback_workorder', { gdid: form.gdID, messagea: form.messageA });
await invoke('feedback_workorder', { gdid: form.gdID });
log.value += `工单 ${form.gdID} 反馈成功。\n`;
await fetchWorkOrders();
} catch (error) {
log.value += `反馈工单 ${form.gdID} 出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
@@ -243,6 +249,7 @@ async function closeSingleWorkOrder() {
log.value += '请输入要关闭的工单ID\n';
return;
}
isCreating.value = true;
log.value += `开始关闭工单 ${form.gdID}...\n`;
try {
await invoke('close_workorder', { gdid: form.gdID });
@@ -250,6 +257,8 @@ async function closeSingleWorkOrder() {
await fetchWorkOrders();
} catch (error) {
log.value += `关闭工单出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
@@ -258,19 +267,18 @@ async function feedbackSelected() {
log.value += '请先选择要反馈的工单。\n';
return;
}
if (!form.messageA) {
log.value += '请在左侧表单填写反馈内容。\n';
return;
}
isCreating.value = true;
log.value += `开始批量反馈 ${selectedOrders.value.size} 个工单...\n`;
try {
const gdids = Array.from(selectedOrders.value);
const result = await invoke('feedback_selected_workorders', { gdids, messagea: form.messageA });
const result = await invoke('feedback_selected_workorders', { gdids });
log.value += `${result}\n`;
await fetchWorkOrders();
selectedOrders.value.clear();
} catch (error) {
log.value += `批量反馈出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
@@ -279,6 +287,7 @@ async function closeSelected() {
log.value += '请先选择要关闭的工单。\n';
return;
}
isCreating.value = true;
log.value += `开始批量关闭 ${selectedOrders.value.size} 个工单...\n`;
try {
const gdids = Array.from(selectedOrders.value);
@@ -288,25 +297,27 @@ async function closeSelected() {
selectedOrders.value.clear();
} catch (error) {
log.value += `批量关闭出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
async function feedbackTodaysOrders() {
if (!form.messageA) {
log.value += '请在左侧表单填写反馈内容。\n';
return;
}
isCreating.value = true;
log.value += `开始反馈今日所有工单...\n`;
try {
const result = await invoke('feedback_today_workorders', { messagea: form.messageA });
const result = await invoke('feedback_today_workorders');
log.value += `${result}\n`;
await fetchWorkOrders();
} catch (error) {
log.value += `反馈今日工单出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
async function closeTodaysOrders() {
isCreating.value = true;
log.value += `开始关闭今日所有工单...\n`;
try {
const result = await invoke('close_today_workorders');
@@ -314,21 +325,22 @@ async function closeTodaysOrders() {
await fetchWorkOrders();
} catch (error) {
log.value += `关闭今日工单出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}
async function feedbackAndCloseTodaysOrders() {
if (!form.messageA) {
log.value += '请在左侧表单填写反馈内容。\n';
return;
}
isCreating.value = true;
log.value += `开始反馈并关闭今日所有工单...\n`;
try {
const result = await invoke('feedback_and_close_today_workorders', { messagea: form.messageA });
const result = await invoke('feedback_and_close_today_workorders');
log.value += `${result}\n`;
await fetchWorkOrders();
} catch (error) {
log.value += `反馈并关闭今日工单出错: ${error}\n`;
} finally {
isCreating.value = false;
}
}