diff --git a/agent/escort-admin/agent.js b/agent/escort-admin/agent.js index 27f0cf7..3ff6857 100644 --- a/agent/escort-admin/agent.js +++ b/agent/escort-admin/agent.js @@ -7,7 +7,7 @@ import EscortAdminPrompts from "./prompts.js"; import { getEnvTool, webFetchTool, webSearchTool, getCalendarInfoTool, getLunarCalendarInfoTool, getYearHolidaysTool, getYearTermsTool, getLatLngTool, - httpGetTool, httpPostTool, escortRecordQueryTool + httpGetTool, httpPostTool, escortRecordQueryTool, escortRecordSetTool } from "./tools/index.js"; export default class EscortAdminAgent { @@ -140,7 +140,7 @@ export default class EscortAdminAgent { backend, tools: [getEnvTool, webFetchTool, webSearchTool, getLatLngTool, httpGetTool, httpPostTool, getCalendarInfoTool, getLunarCalendarInfoTool, getYearHolidaysTool, getYearTermsTool, - escortRecordQueryTool] + escortRecordQueryTool, escortRecordSetTool] }); return this.agent; diff --git a/agent/escort-admin/tools/db/escort_record_set.js b/agent/escort-admin/tools/db/escort_record_set.js index cd85fb7..e86fe08 100644 --- a/agent/escort-admin/tools/db/escort_record_set.js +++ b/agent/escort-admin/tools/db/escort_record_set.js @@ -3,20 +3,27 @@ import z from "zod"; import { DBModel } from "../../../../models/index.js"; const escortRecordSetTool = tool( - async ({ mobile, status, notes, payment }) => { + async ({ orderId, status, notes, payment }) => { try { - if (!mobile) { + if (!orderId) { return { success: false, - error: "Mobile phone number is required as the lookup key", + error: "Order ID (_id or orderNo) is required as the lookup key", }; } - const record = await DBModel.EscortRecord.findOne({ "patient.mobile": mobile }); + const query = { + $or: [ + { _id: orderId }, + { orderNo: orderId } + ] + }; + + const record = await DBModel.EscortRecord.findOne(query); if (!record) { return { success: false, - error: `No escort record found for mobile: ${mobile}`, + error: `No escort record found for order ID: ${orderId}`, }; } @@ -72,11 +79,11 @@ const escortRecordSetTool = tool( { name: "escort_record_set", description: - "Update escort record fields by patient mobile phone number. Supports updating status, notes (patientNote, escortNote, medicalSummary), and payment (totalFee, paidFee, status). Only provided fields will be updated.", + "Update escort record fields by order ID (_id or orderNo). Supports updating status, notes (patientNote, escortNote, medicalSummary), and payment (totalFee, paidFee, status). Only provided fields will be updated.", schema: z.object({ - mobile: z + orderId: z .string() - .describe("Patient mobile phone number used as the lookup key"), + .describe("Order ID (_id or orderNo) used as the lookup key"), status: z .enum(["pending", "confirmed", "in_progress", "completed", "cancelled"]) .optional() diff --git a/agent/escort-admin/tools/index.js b/agent/escort-admin/tools/index.js index 318e05c..c38562d 100644 --- a/agent/escort-admin/tools/index.js +++ b/agent/escort-admin/tools/index.js @@ -21,5 +21,6 @@ export { getEnvTool } from './system/envs.js'; // db export { escortRecordQueryTool } from './db/escort_record_query.js'; +export { escortRecordSetTool } from './db/escort_record_set.js'; diff --git a/conf.json b/conf.json index 7d1e780..dff2c8e 100644 --- a/conf.json +++ b/conf.json @@ -1,7 +1,9 @@ { - "wechat": { - "appid": "wxf73c79e16837af07", - "secret": "5a061d65f4d35d19e62e83b98f6c63cf" + "app": { + "wxapp-escort": { + }, + "wxapp-escort-admin": { + } }, "mongodb": { "str": "mongodb://huashengtec.com:6000", diff --git a/websocket.js b/websocket.js index ef6d2c6..7722992 100644 --- a/websocket.js +++ b/websocket.js @@ -1,5 +1,6 @@ import WebSocket, { WebSocketServer } from 'ws'; import http from 'http'; +import fetch from 'node-fetch'; import { DBModel } from "./models/index.js"; import { chatTask } from "./agent/escort/task.js"; import { adminAgent } from "./agent/escort-admin/agent.js" @@ -81,12 +82,12 @@ export default class WebSocketServerManager { if (msg.type === 'chat' || msg.type === 'clear') { if (msg.agent === 'escort-admin') { - const userInfo = await this.getUserInfo(msg.userId); + const userInfo = await this.getUserInfo(msg.token, msg.userId); adminAgent.streamChat(userInfo, [msg], (source, type, content, id) => { ws.send(JSON.stringify({ source, type, content, id })); }); } else { - const userInfo = await this.getUserInfo(msg.userId); + const userInfo = await this.getUserInfo(msg.token, msg.userId); chatTask.streamChat(userInfo, msg, (source, type, content, id) => { ws.send(JSON.stringify({ source, type, content, id })); }); @@ -132,8 +133,19 @@ export default class WebSocketServerManager { return this.wss.clients.size; } - async getUserInfo(userId) { - if (!DBModel.User || userId.length === 0) return null; - return await DBModel.User.findById(userId).lean().exec(); + async getUserInfo(token, userId) { + if (!token || !userId) return null; + + const url = "http://127.0.0.1:9010/user/userInfo"; + const res = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + token, + userId + }) + }); + const data = await res.json(); + return data.data.user; } }