| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- import type { VariablesContext } from "../middlewares.ts";
- import { WorkflowEngine } from "../utils/workflow_engine.ts";
- export async function createWorkOrder(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const orderData = await c.req.json();
-
- const [id] = await apiClient.database.table('work_orders').insert({
- ...orderData,
- status: 'pending',
- created_at: apiClient.database.fn.now(),
- updated_at: apiClient.database.fn.now()
- });
-
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- return c.json({ data: order });
- } catch (error) {
- return c.json({ error: "创建工作单失败" }, 500);
- }
- }
- export async function getWorkOrders(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { status, assigneeId } = c.req.query();
-
- let query = apiClient.database.table('work_orders');
-
- if (status) {
- query = query.where('status', status);
- }
-
- if (assigneeId) {
- query = query.where('assignee_id', assigneeId);
- }
-
- const orders = await query.select();
- return c.json({ data: orders });
- } catch (error) {
- return c.json({ error: "获取工作单列表失败" }, 500);
- }
- }
- export async function getWorkOrderDetail(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
-
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- if (!order) {
- return c.json({ error: 'Work order not found' }, 404);
- }
-
- return c.json({ data: order });
- } catch (error) {
- return c.json({ error: "获取工作单详情失败" }, 500);
- }
- }
- export async function updateWorkOrder(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
- const updateData = await c.req.json();
-
- await apiClient.database.table('work_orders')
- .where('id', id)
- .update({
- ...updateData,
- updated_at: apiClient.database.fn.now()
- });
-
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- return c.json({ data: order });
- } catch (error) {
- return c.json({ error: "更新工作单失败" }, 500);
- }
- }
- export async function changeWorkOrderStatus(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
- const { status, comment } = await c.req.json();
- const user = c.get('user');
- if (!user || typeof user !== 'object' || !('id' in user) || !('roles' in user)) {
- return c.json({ error: "未授权访问" }, 401);
- }
- const userRoles = String(user.roles).split(',');
- const workOrderId = parseInt(id);
- const userId = Number(user.id);
-
- // 获取当前工单状态
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- if (!order) {
- return c.json({ error: '工单不存在' }, 404);
- }
- // 初始化工作流引擎
- const workflow = new WorkflowEngine(c);
-
- // 检查状态流转是否允许
- const canTransition = await workflow.canTransition(
- order.status,
- status,
- userRoles
- );
-
- if (!canTransition) {
- return c.json({
- error: `不允许从${order.status}状态变更为${status}状态`
- }, 403);
- }
- // 更新工单状态
- const updateData: Record<string, any> = {
- status,
- updated_at: apiClient.database.fn.now()
- };
-
- // 如果是关闭操作,记录关闭人和关闭时间
- if (status === 'closed') {
- updateData.closer_id = userId;
- updateData.close_time = apiClient.database.fn.now();
- }
-
- await apiClient.database.table('work_orders')
- .where('id', id)
- .update(updateData);
- // 记录状态变更历史
- await workflow.logStatusChange(
- parseInt(id),
- order.status,
- status,
- Number(user.id),
- comment
- );
-
- // 记录流程操作历史
- if (status === 'closed') {
- await apiClient.database.table('work_order_process_history').insert({
- work_order_id: workOrderId,
- action_type: 'close',
- operator_id: userId,
- operate_time: apiClient.database.fn.now(),
- comment
- });
- }
- // 检查超时状态
- await workflow.checkTimeout(parseInt(id));
- return c.json({ data: { success: true } });
- } catch (error) {
- console.error('状态变更失败:', error);
- return c.json({ error: "更新工作单状态失败" }, 500);
- }
- }
- export async function getWorkOrderStatusHistory(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
-
- const history = await apiClient.database.table('work_order_status_history')
- .where('work_order_id', id)
- .orderBy('created_at', 'desc')
- .select();
-
- return c.json({ data: history });
- } catch (error) {
- return c.json({ error: "获取状态历史失败" }, 500);
- }
- }
- export async function assignWorkOrder(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
- const { assigneeId, comment } = await c.req.json();
- const user = c.get('user');
- if (!user || typeof user !== 'object' || !('id' in user)) {
- return c.json({ error: "未授权访问" }, 401);
- }
- const userId = Number(user.id);
-
- // 获取当前工单信息
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- if (!order) {
- return c.json({ error: '工单不存在' }, 404);
- }
- const isReassign = order.assignee_id !== null;
- const updateData: Record<string, any> = {
- assignee_id: assigneeId,
- updated_at: apiClient.database.fn.now()
- };
-
- if (isReassign) {
- updateData.reassignee_id = userId;
- updateData.reassign_time = apiClient.database.fn.now();
- } else {
- updateData.assign_time = apiClient.database.fn.now();
- }
-
- await apiClient.database.table('work_orders')
- .where('id', id)
- .update(updateData);
-
- // 记录流程操作历史
- await apiClient.database.table('work_order_process_history').insert({
- work_order_id: parseInt(id),
- action_type: isReassign ? 'reassign' : 'assign',
- operator_id: userId,
- operate_time: apiClient.database.fn.now(),
- comment
- });
-
- return c.json({ data: { success: true } });
- } catch (error) {
- return c.json({ error: "分配工作单失败" }, 500);
- }
- }
- export async function getWorkflowDetails(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const { id } = c.req.param();
-
- // 获取工单基本信息
- const [order] = await apiClient.database.table('work_orders')
- .where('id', id)
- .select();
-
- if (!order) {
- return c.json({ error: '工单不存在' }, 404);
- }
-
- // 获取流程历史记录
- const processHistory = await apiClient.database.table('work_order_process_history')
- .where('work_order_id', id)
- .orderBy('operate_time', 'desc')
- .select();
-
- // 获取状态变更历史
- const statusHistory = await apiClient.database.table('work_order_status_history')
- .where('work_order_id', id)
- .orderBy('change_time', 'desc')
- .select();
-
- return c.json({
- data: {
- ...order,
- processHistory,
- statusHistory
- }
- });
- } catch (error) {
- return c.json({ error: "获取工单流程详情失败" }, 500);
- }
- }
- export async function getWorkOrderSettings(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
-
- const settings = await apiClient.database.table('work_order_settings')
- .select();
-
- return c.json({ data: settings });
- } catch (error) {
- return c.json({ error: "获取工作单设置失败" }, 500);
- }
- }
- export async function updateWorkOrderSettings(c: VariablesContext) {
- try {
- const apiClient = c.get('apiClient');
- const settings = await c.req.json();
-
- await apiClient.database.table('work_order_settings')
- .update(settings);
-
- return c.json({ data: { success: true } });
- } catch (error) {
- return c.json({ error: "更新工作单设置失败" }, 500);
- }
- }
|