fix: 1. 重新对齐交叉评查的接口。

2. 确认评查结果的接口对接。 3. 新增评查点适配省级创建的响应数据和其他用户创建的单条响应数据。  4. 文档列表的文档类型通过通用的查询接口查询文档类型。优化加载状态的时机。
This commit is contained in:
2025-12-11 11:16:50 +08:00
parent ba517d7b9c
commit d8bba607fc
18 changed files with 3435 additions and 1086 deletions
+217 -146
View File
@@ -1,5 +1,5 @@
import { postgrestGet, type PostgrestParams, postgrestPut, postgrestPost } from "../postgrest-client";
import {getDocumentWithNoUserId} from "~/api/files/documents";
// import {getDocumentWithNoUserId} from "~/api/files/documents";
import dayjs from "dayjs";
import { getUserSession } from "~/api/login/auth.server";
import { apiRequest } from "../axios-client";
@@ -124,13 +124,13 @@ interface ScoringProposal {
document_id: string | number;
}
/**
* 获取当前评查文件的所有评查点结果
/** ============== (废弃,已经采用api接口的方式进行查询)
* 获取当前评查文件的所有评查点结果
* @param fileId 评查文件ID
* @param request Remix请求对象,用于获取用户会话
* @returns 评查点结果列表和统计数据
*/
export async function getReviewPoints(fileId: string, request: Request) {
export async function getReviewPoints(fileId: string, request: Request) {
// 获取用户会话信息
const { userInfo, frontendJWT } = await getUserSession(request);
@@ -744,17 +744,27 @@ export async function getReviewPoints(fileId: string, request: Request) {
* 更新评查结果
* @param resultId 评查结果ID
* @param editAuditStatusId 审核状态ID
* @param result 评查结果 (true/false)
* @param result 评查结果 (true/false/review)
* @param message 评查意见
* @param request Remix请求对象,用于获取用户会话
* @param documentId 文档ID(可选,用于创建新审核状态)
* @param evaluationPointId 评查点ID(可选,用于创建新审核状态)
* @returns 更新后的评查结果
*
* 🔥 接口文档: auth_doc/评查审核接口对接文档.md
* 📍 使用接口:
* - 3.1 更新评查结果: PATCH /admin/v2/evaluations/results/{result_id}
* - 3.2 创建审核状态: POST /admin/v2/evaluations/audit-status
* - 3.3 更新审核状态: PATCH /admin/v2/evaluations/audit-status/{audit_status_id}
*/
export async function updateReviewResult(
resultId: string,
editAuditStatusId: string | number,
result: string,
resultId: string,
editAuditStatusId: string | number,
result: string,
message: string,
request: Request
request: Request,
documentId?: string | number,
evaluationPointId?: string | number
): Promise<{
data?: unknown;
error?: string;
@@ -763,122 +773,184 @@ export async function updateReviewResult(
try {
// 获取用户会话信息
const { userInfo, frontendJWT } = await getUserSession(request);
if (!userInfo?.user_id) {
console.error("用户身份验证失败");
return { error: '用户身份验证失败', status: 401 };
}
const userId = userInfo.user_id;
if (!resultId) {
return { error: '评查结果ID不能为空', status: 400 };
}
// 首先获取当前评查结果数据
const currentResultResponse = await postgrestGet('/api/postgrest/proxy/evaluation_results', {
select: '*',
filter: { id: `eq.${resultId}` },
token: frontendJWT
});
console.log('/api/postgrest/proxy/evaluation_results',currentResultResponse.error)
if (currentResultResponse.error) {
return { error: currentResultResponse.error, status: currentResultResponse.status };
}
const currentResultData = extractApiData<EvaluationResult[]>(currentResultResponse.data);
if (!currentResultData || !Array.isArray(currentResultData) || currentResultData.length === 0) {
return { error: '未找到评查结果数据', status: 404 };
}
const currentResult = currentResultData[0];
const currentEvaluatedResults = currentResult.evaluated_results || {};
// 判断是否是重新审核操作
const isReview = result === 'review';
// console.log('isReview-------', result);
// 构建要更新的数据,保留原有字段
const updatedEvaluatedResults = {
...currentEvaluatedResults,
// 如果是重新审核操作,不更新result和message
...(isReview ? {} : { result: result === 'true' ? true : false, message }),
};
const updatedData = {
evaluated_results: updatedEvaluatedResults
};
// 调用 API 更新评查点结果数据
const resultResponse = await postgrestPut<unknown, typeof updatedData>(
'/api/postgrest/proxy/evaluation_results',
updatedData,
{ id: resultId },
frontendJWT
);
if (resultResponse.error) {
return { error: resultResponse.error, status: resultResponse.status };
// ============================================
// 步骤1: 调用3.1接口更新评查结果(如果不是重新审核操作)
// ============================================
if (!isReview) {
// 构建请求数据
const updateResultData: {
result?: 'true' | 'false';
message?: string;
} = {
result: result === 'true' ? 'true' : 'false',
message: message
};
// 调用 3.1 接口: PATCH /admin/v2/evaluations/results/{result_id}
const resultResponse = await apiRequest<{
success: boolean;
message: string;
data: {
result_id: number;
updated_fields: string[];
};
}>(
`/admin/v2/evaluations/results/${resultId}`,
{
method: 'PATCH',
headers: {
'Authorization': `Bearer ${frontendJWT}`,
'Content-Type': 'application/json'
},
data: updateResultData
}
);
if (resultResponse.error) {
console.error('❌ [updateReviewResult] 3.1接口调用失败:', resultResponse.error);
return { error: resultResponse.error, status: resultResponse.status || 500 };
}
if (!resultResponse.data?.success) {
console.error('❌ [updateReviewResult] 3.1接口响应异常:', resultResponse.data);
return { error: resultResponse.data?.message || '更新评查结果失败', status: 500 };
}
}
// 处理audit_status表的更新或新增
// ============================================
// 步骤2: 处理审核状态(创建或更新)
// ============================================
// 确定edit_audit_status的值:
// 如果是重新审核操作,值为0;否则值为1
const editAuditStatusValue = isReview ? 0 : 1;
// console.log('editAuditStatusValue-------', editAuditStatusValue);
// console.log('editAuditStatusId-------', editAuditStatusId);
if (editAuditStatusId && editAuditStatusId !== '') {
// 更新现有审核状态记录
const auditStatusResponse = await postgrestPut(
'/api/postgrest/proxy/audit_status',
{
edit_audit_status: editAuditStatusValue,
// 重新审核时不更新message
...(isReview ? {} : { message })
},
{
id: editAuditStatusId,
user_id: userId // 添加用户ID条件,确保只能更新自己的记录
},
frontendJWT
// ============================================
// 使用3.3接口更新现有审核状态记录
// PATCH /admin/v2/evaluations/audit-status/{audit_status_id}
// ============================================
const updateAuditData: {
edit_audit_status: number;
message?: string;
} = {
edit_audit_status: editAuditStatusValue
};
// 重新审核时不更新message
if (!isReview) {
updateAuditData.message = message;
}
const auditStatusResponse = await apiRequest<{
success: boolean;
message: string;
data: {
audit_status_id: number;
updated_fields: string[];
};
}>(
`/admin/v2/evaluations/audit-status/${editAuditStatusId}`,
{
method: 'PATCH',
headers: {
'Authorization': `Bearer ${frontendJWT}`,
'Content-Type': 'application/json'
},
data: updateAuditData
}
);
if (auditStatusResponse.error) {
console.error('❌ [updateReviewResult] 3.3接口调用失败:', auditStatusResponse.error);
return { error: auditStatusResponse.error, status: auditStatusResponse.status || 500 };
}
} else {
// 如果没有editAuditStatusId,则创建新记录
// 首先获取文档ID和评查点ID
const documentId = currentResult.document_id;
const evaluationPointId = currentResult.evaluation_point_id;
// 创建新的审核状态记录
const newAuditStatus = {
document_id: documentId,
evaluation_point_id: evaluationPointId,
evaluation_result_id: resultId,
edit_audit_status: editAuditStatusValue,
message: isReview ? '' : message,
user_id: userId // 添加用户ID
};
// 使用postgrestPost创建新记录
const postResponse = await postgrestPost('/api/postgrest/proxy/audit_status', newAuditStatus, frontendJWT);
if (postResponse.error) {
return { error: postResponse.error, status: postResponse.status || 500 };
if (!auditStatusResponse.data?.success) {
console.error('❌ [updateReviewResult] 3.3接口响应异常:', auditStatusResponse.data);
return { error: auditStatusResponse.data?.message || '更新审核状态失败', status: 500 };
}
return { data: auditStatusResponse.data };
} else {
// ============================================
// 使用3.2接口创建新审核状态记录
// POST /admin/v2/evaluations/audit-status
// ============================================
// 如果没有传入documentId和evaluationPointId,需要先获取
if (!documentId || !evaluationPointId) {
// 从评查结果中获取document_id和evaluation_point_id
const currentResultResponse = await postgrestGet('/api/postgrest/proxy/evaluation_results', {
select: 'document_id,evaluation_point_id',
filter: { id: `eq.${resultId}` },
token: frontendJWT
});
if (currentResultResponse.error) {
return { error: currentResultResponse.error, status: currentResultResponse.status };
}
const currentResultData = extractApiData<EvaluationResult[]>(currentResultResponse.data);
if (!currentResultData || !Array.isArray(currentResultData) || currentResultData.length === 0) {
return { error: '未找到评查结果数据', status: 404 };
}
documentId = currentResultData[0].document_id;
evaluationPointId = currentResultData[0].evaluation_point_id;
}
// 创建新的审核状态记录
const newAuditStatusData = {
document_id: Number(documentId),
evaluation_point_id: Number(evaluationPointId),
evaluation_result_id: Number(resultId),
edit_audit_status: editAuditStatusValue,
message: isReview ? '' : message
};
const createAuditResponse = await apiRequest<{
id: number;
user_id: number;
document_id: number;
evaluation_point_id: number;
evaluation_result_id: number;
edit_audit_status: number;
message: string;
created_at: string;
updated_at: string;
}>(
`/admin/v2/evaluations/audit-status`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${frontendJWT}`,
'Content-Type': 'application/json'
},
data: newAuditStatusData
}
);
if (createAuditResponse.error) {
console.error('❌ [updateReviewResult] 3.2接口调用失败:', createAuditResponse.error);
return { error: createAuditResponse.error, status: createAuditResponse.status || 500 };
}
return { data: createAuditResponse.data };
}
const extractedData = extractApiData<unknown>(resultResponse.data);
if (!extractedData) {
return { error: '更新评查结果失败', status: 500 };
}
return { data: extractedData };
} catch (error) {
console.error('更新评查结果失败:', error);
return {
@@ -893,6 +965,9 @@ export async function updateReviewResult(
* @param documentId 文档ID
* @param request Remix请求对象,用于获取用户会话
* @returns 更新结果
*
* 🔥 接口文档: auth_doc/评查审核接口对接文档.md 3.4
* 📍 API地址: PATCH /admin/v2/evaluation/documents/{document_id}/confirm
*/
export async function confirmReviewResults(documentId: string, request: Request): Promise<{
data?: { auditStatus: number; };
@@ -902,57 +977,53 @@ export async function confirmReviewResults(documentId: string, request: Request)
try {
// 获取用户会话信息
const { userInfo, frontendJWT } = await getUserSession(request);
if (!userInfo?.user_id) {
console.error("用户身份验证失败");
return { error: '用户身份验证失败', status: 401 };
}
const userId = userInfo.user_id;
if (!documentId) {
return { error: '文档ID不能为空', status: 400 };
}
// 获取该文档的所有评查点结果
// const reviewPointsResponse = await getReviewPoints(documentId);
// if ('error' in reviewPointsResponse && reviewPointsResponse.error) {
// return { error: reviewPointsResponse.error, status: reviewPointsResponse.status };
// }
// if (!('data' in reviewPointsResponse) || !reviewPointsResponse.data || !Array.isArray(reviewPointsResponse.data)) {
// return { error: '获取评查点数据失败', status: 500 };
// }
// // 计算总分数
// const totalScore = reviewPointsResponse.stats?.score || 0;
// // 根据总分确定审核状态
// // <80分:不通过(-1),>=80分:通过(1)
// const auditStatus = totalScore < 80 ? -1 : 1;
// 更新文档的审核状态
const updateDocumentParams = {
audit_status: 1
};
// 调用API更新文档审核状态
const response = await postgrestPut<{ id: string }, typeof updateDocumentParams>(
'/api/postgrest/proxy/documents',
updateDocumentParams,
{
id: documentId,
user_id: userId // 添加用户ID条件,确保只能更新自己的文档
},
frontendJWT
// 调用后端API确认文档审核完成
// 接口: PATCH /admin/v2/evaluations/documents/{document_id}/confirm
const response = await apiRequest<{
success: boolean;
message: string;
data: {
document_id: number;
audit_status: number;
};
}>(
`/admin/v2/evaluations/documents/${documentId}/confirm`,
{
method: 'PATCH',
headers: {
'Authorization': `Bearer ${frontendJWT}`,
'Content-Type': 'application/json'
},
data: {
audit_status: 1
}
}
);
// 处理错误响应
if (response.error) {
return { error: response.error, status: response.status };
console.error('❌ [confirmReviewResults] API调用失败:', response.error);
return { error: response.error, status: response.status || 500 };
}
return { data: { auditStatus: 1} };
// 成功响应
if (response.data?.success) {
return { data: { auditStatus: response.data.data?.audit_status || 1 } };
}
// 数据为空或格式不正确
console.error('❌ [confirmReviewResults] API响应数据异常:', response.data);
return { error: response.data?.message || '确认文档审核失败', status: 500 };
} catch (error) {
console.error('确认评查结果失败:', error);
return {