CUHKSZApiGateway 网关接口文档(Controller 端点明细)
整理日期:2026-09-17
范围:网关自身暴露的全部 HTTP 端点(10 个 Controller、约 100 个 Action),每个端点注明:地址、HTTP 方法、请求参数、返回说明,以及内部调用了哪个万欣接口(WX)或 AN1 平台接口。
万欣接口本身的字段详情见《接口详细文档.md》;网关与万欣的差异见《接口对比差异.md》。
目录
- 1. 总体约定
- 2. IntegratedMachineController(智能终端,主控制器)
- 3. StockController(库存/标签)
- 4. AuthController(鉴权)
- 5. LabController(实验室)
- 6. OperateController(操作记录)
- 7. SettController(设置)
- 8. WindMachineController(风机)
- 9. ElectronicScreenController(电子屏)
- 10. HomeController / BtlockmpController
- 11. 已知问题记录
1. 总体约定
1.1 路由规则
| Controller | 路由模板 | 路径参数 |
|---|---|---|
| IntegratedMachineController | /api/{schName}/IntegratedMachine/{Action} |
schName:学校/租户标识,透传给 AN1 作 URL 前缀 |
| StockController | /api/{tenantCode}/Stock/{Action} |
tenantCode:同上 |
| AuthController | /api/{tenantCode}/Auth/{Action} |
|
| LabController | /api/{tenantCode}/Lab/{Action} |
|
| OperateController | /api/{tenantCode}/Operate/{Action} |
|
| SettController | /api/{tenantCode}/Sett/{Action} |
|
| WindMachineController | /api/{tenantCode}/WindMachine/{Action} |
|
| ElectronicScreenController | /api/{schCode}/ElectronicScreen/{Action} |
schCode:同 schName |
| HomeController | /Home/{Action} |
无 |
| BtlockmpController | /api/Btlockmp/{Action} |
无 |
1.2 下游依赖
- AN1 平台:
PostAsync/GetAsync(HeaderCapture 透传终端 Header)→ BaseAddressCustomerSettings.GotoAddress(当前http://10.40.6.169:9002/api/) - 万欣系统:
WXPostAsync/WXGetAsync(WXHeaderCapture 透传 Header + NLog 记录入参返回)→ BaseAddressCustomerSettings.GotoWXAddress(当前http://10.40.6.73),URL 常量见Util/WXOpenApi.cs
1.3 统一返回包装(ResUtil,camelCase 序列化)
| 字段 | 类型 | 说明 |
|---|---|---|
| returnCode | int | 1 成功;0 失败;2 逻辑警告;404 not found |
| message | string | “ok” 或错误描述 |
| data | any | 业务数据(Ok(data) 时才有) |
- 透传端点:原样返回 AN1 的 JSON(结构由 AN1 决定,非网关包装)
- 万欣端点:网关加工后用 ResUtil 包装;万欣返回非 0 flag、HTTP 非 200、批处理 errNo 非 0 时返回
returnCode=0+ 万欣 msg/errName - 重量约定:终端 ↔ 网关用克,网关 ↔ 万欣用毫克(×1000/÷1000)
2. IntegratedMachineController(智能终端,主控制器)
文件:Controllers/IntegratedMachineController.cs(2342 行)。getCabinetIdByLabId(schName):按请求头 LabId 查 AN1 存储位置,返回 AN1-{positionId} 作为万欣 GZBH。
2.1 调用万欣接口的端点(18 个)
2.1.1 POST /api/{schName}/IntegratedMachine/Login — 登录
请求(Body:WXLoginReqDto):
| 字段 | 类型 | 说明 |
|---|---|---|
| Account | string | 账号(Type=1 时作为万欣工号 GH) |
| Password | string | 密码 |
| CardId | string | 卡号 |
| Face | string | 人脸 |
| LabId | int | 实验室 ID |
| Type | int | 1 账号密码、2 白卡、3 人脸 |
下游调用链:Type=1 时 ① 万欣 GetUserInfo(PDFS=1 按工号,GZBH=本实验室柜号)→ ② AN1 User/SaveUser(同步万欣用户:userId=ZH、userName=XM、email=LXYX、phone=LXDH)→ ③ AN1 IntegratedMachine/Login(透传原参数)。
返回:Type=1 成功后透传 AN1 Login 返回(含 token);Type=2/3 直接透传 AN1 Login。万欣用户不存在 → returnCode=0, message="用户不存在"。
2.1.2 POST .../WXCheckAuth — 检查万欣管理员权限
请求:同 WXLoginReqDto。
下游:① AN1 IntegratedMachine/Login(已存在且 returnCode=1 → 直接返回 “2”)→ ② 遍历实验室全部柜子调用万欣 GetUserInfo(PDFS=1),任一柜 SFGZGLY=1 → 返回 “1”(管理员),否则 “0”。
返回:data 为字符串 "1"/"0"/"2"。
2.1.3 POST .../GetWXUser — 查询用户是否柜子管理员
请求:同 WXLoginReqDto。下游:遍历柜子调万欣 GetUserInfo(PDFS=1)。返回:data=”1”/“0”。
2.1.4 GET .../GetItemInfoByFlagIdV5?flagId=&userId= — 按标签号查试剂详情
请求(Query):flagId(QRNO 标签编号)、userId(操作人工号)。
下游:万欣 GetDatumPrintQueue(PDFS=3 按标签编号,GZBH=本实验室柜号)。
返回(data,加工后):
| 字段 | 说明 |
|---|---|
| itemId / itemName / purity / spec | 物资信息(itemName=WZMC、purity=WZGG、spec=WZBZ) |
| mass / unit | 当前重量(DQZL 毫克÷1000,单位 g) |
| tagId / QRBH | 二维码内容(QRCODE)/ 标签编号 |
| partitionId / position | 柜号数字部分(GZBH 去 AN1- 前缀)/ 柜名 GZMC |
| vendor/level/density/containerWeight/engName/useReagentMode/isDoubleLock | 占位(空/0) |
QRZT=0(未入库)→ 报”标签未入库”;QRZT=4 → 报”药品已报废”。
2.1.5 POST .../ItemStockSign — 试剂入库(扫码入柜)
请求(Body:WXItemStockSignReqDto,主要字段):
| 字段 | 类型 | 说明 |
|---|---|---|
| UserId | string | 操作人工号 → 万欣 gh |
| Layer | long | 存储位置 → gzbh=AN1-{Layer} |
| PartitionId | long | 层编号 → CBH |
| TagId | string | 二维码内容 → QRCODE(解析后的值) |
| Mass | decimal | 毛重(克)→ CSZL=×1000 毫克 |
| flagIds / GAQRCODE / QRNO / WybsId | 其他 | 回传绑定用(见 2.1.6) |
下游:万欣 AddQrRepertoryWxpNew(qrsl=”1”、PZZL=”0”)。返回:成功”入库成功!”;失败返回 errName。
2.1.6 POST .../BindWXQrcodeAndRFID — 柜子自打印标签回传绑定
请求:WXItemStockSignReqDto(用 flagIds[0]→RFID、TagId→QRCODE、GAQRCODE、QRNO、WybsId、UserId→gh)。
下游:万欣 AddQrPrintQueueRFID。返回:成功”绑定成功!”。
(原注释代码,2026-09-15 按《接口.md》恢复修复。)
2.1.7 POST .../ItemScrapedNetWeight — 空瓶登记 / 过期试剂回收
请求(Body:WXItemScrapedReqDto):
| 字段 | 类型 | 说明 |
|---|---|---|
| FlagId | string | 标签编号(QRNO) |
| ScrapedUserId | string | 操作人 → gh |
| ScrapedMass | decimal | 称重(克)→ CSZL 毫克 |
| IsExhaust | int | 2=用完(SJHSLX=0 空瓶);否则 1=过期试剂 |
| ScrapeRemarks | string | “0”→gzbh 空;否则 gzbh=AN1-{ScrapeRemarks} |
下游:① 万欣 GetDatumPrintQueue(PDFS=3 换 QRCODE)→ ② 万欣 AddQrBorrowLossWxpNew。返回:errNo=0 成功,否则 errName。
2.1.8 GET .../GetItemInfoAndOperateByFlagIdV2 — 试剂详情 + 变动轨迹
请求(Query:WXGetItemInfoAndOperateByFlagIdReqDto):FlagId(QRNO)、UserId。
下游:① 万欣 GetDatumPrintQueue(PDFS=3)→ ② 万欣 GetQrRecord(PDFS=2 按 QRCODE)。
返回(data):试剂基本信息(同 2.1.4)+ operateLogs[]:
| 字段 | 说明 |
|---|---|
| operateUser | 操作人(CZRMC) |
| mass | 剩余重量 KSZL 毫克÷1000+”g” |
| consumption | 使用量 SYZL(毫克) |
| operateTime | TJSJ |
| actionType | CZLXMC(采购入库/领用出库原样,其他附 (SYZL÷1000g)) |
2.1.9 GET .../GetStockInfoByPartition?partitionId= — 柜内库存分组统计
请求(Query):partitionId(存储位置)。下游:万欣 GetLockerDatumQrByNo(gzbh=AN1-{partitionId})。
返回(data[],按 名称/规格/CAS/管制类别/分类/包装/层 分组):
| 字段 | 说明 |
|---|---|
| name / casNumber / spec / level / purity / brand / position | 名称/CAS/包装/规格(level=WZGG)/空/空/层 CMC |
| count | 瓶数 |
| mass | 合计当前重量 DQZL 毫克÷1000+”g” |
| itemType | 易制毒2/易制爆3/剧毒4/管制类5/其他0(按 SGZLBMC、FLMC 判断) |
柜子无危化品(万欣特定 msg)→ 返回空数组。
2.1.10 GET .../GetLockerInfo?partitionId= — 柜子基础信息
请求(Query):partitionId。下游:万欣 GetLockersByNo。返回:万欣 data 原样(柜子信息 + dataList 储物格明细,字段见《接口详细文档.md》3.2)。(2026-09-15 新增。)
2.1.11 POST .../CollarReagent — 领用出库
请求(Body:WXCollarReagentDto):
| 字段 | 类型 | 说明 |
|---|---|---|
| FlagId | string | 标签编号(QRNO,必填) |
| UserId | string | 操作人 → gh(必填) |
| Wybsid | string | 领用单唯一 ID(必填) |
| Weight | decimal | 毛重(克)→ CSZL 毫克(必填 ≥1) |
下游:① 万欣 GetDatumPrintQueue(PDFS=3 换 QRCODE)→ ② 万欣 AddQrBorrowWxpNew(wybsid、qrsl=”1”)。返回:errNo=0 成功,否则 errName。
2.1.12 POST .../ReturnItem — 领用归还
请求(Body:ReturnItemDto):
| 字段 | 类型 | 说明 |
|---|---|---|
| FlagId | string | 标签编号(必填) |
| UserId | string | 操作人 → gh(必填) |
| PositionId | long | 存储位置 → gzbh=AN1-{PositionId} |
| PartitionId | long | 层编号 → CBH |
| Weight | decimal | 毛重(克)→ CSZL(必填 ≥1) |
下游:① 万欣 GetDatumPrintQueue(PDFS=3)→ ② 万欣 AddQrBorrowBackWxpNew。返回:errNo=0 成功,否则 errName。
2.1.13 GET .../GetItemInfoByTagId?tagId=&userId= — 入库前查标签
请求(Query):tagId(QRNO)、userId。下游:万欣 GetDatumPrintQueue(PDFS=3)。
返回(data):areaId/areaName/casNumber/density/itemName/layer/level/partitionId/partitionName/positionId/positionName/purity/size/unit/vendor/isOpen/bottleMaterial/containerWeight/isDoubleLock + QRCODE、WYBSID。QRZT≠0 → 报”标签已入库或已报废”。
2.1.14 GET .../GetInboundOrderInfo?qrcode= — 扫入库单二维码查入库单
请求(Query):qrcode(入库单二维码;网关做 UrlDecode + 空格还原 +)。
下游:万欣 GetRepertory(PDFS=2 按二维码,GH 空)。
返回(data):WYBSID/DH/GH/XM/BMBH/BMMC/SYSBH/SYSMC/CKBH/CKMC/SQRID/SQRBH/SQRMC/RKLX/RKZSL/SFRK/TJSJ/YSCQRSL(字段含义见《接口详细文档.md》3.4)。
2.1.15 GET .../GetPullOrderInfo?qrcode= — 扫领用单二维码查领用单+物资
请求(Query):qrcode(领用单二维码,同样做 UrlDecode/+还原)。
下游:① 万欣 GetBorrow(PDFS=2,LYRGH1/LYRGH2 空)→ ② 万欣 GetDatumlistById(wybsid=单据 WYBSID、djlx=”5”)。
返回(data):WYBSID + data[](物资明细 16 字段:CAS/WZID/WZBH/WZMC/WZGG/WZBZ/JLDWMC/SGZLBMC/FLMC/SQSL/YLSL/YSCQRSL/KCFBQK/SCCJ/PP/GYSMC)+ 单据头(LYRBH1/LYRMC1/LYRBH2/LYRMC2/SQZSL/YLZSL/XZZSL/TJSJ)。
2.1.16 GET .../GetPreSignReagentInfoByQrCode?WYBSID=&userId= — 按入库单查预入库明细
下游:万欣 GetDatumPrintQueue(PDFS=4 按入库单唯一 ID)。返回:万欣 data 数组原样。
2.1.17 GET .../GetPreSignReagentInfoByQrCodeV2 — 同上 V2
同 2.1.16,返回包装为 {rt, details[]}。
2.1.18 POST .../BorrowRuKu — 领用入库(多级库)
请求(Body:WXBorrowRuKuReqDto):
| 字段 | 类型 | 说明 |
|---|---|---|
| UserId | string | 操作人 → gh(必填) |
| Wybsid | string | 领用单唯一 ID(必填) |
| PositionId | long | 存储位置 → gzbh |
| Jsonlist | List |
批量明细(必填):RFID/QRCODE(必填)/Weight 克(→CSZL 毫克)/CBH 层编号(必填) |
下游:万欣 AddQrBorrowRuKuWxp(qrsl=明细数)。返回:全部 errNo=0 → “入库成功!”,任一失败返回该条 errName。(2026-09-15 新增。)
2.2 AN1 平台透传端点(50 个)
以下端点网关不做业务加工,转发到 AN1({schName} 为 URL 前缀),原样返回 AN1 JSON。请求字段来自 GatewayService DTO。
| # | 端点 | 方法 | 请求 | AN1 目标 |
|---|---|---|---|---|
| 1 | DeviceInfoSync | GET | Query:DeviceId、StartDate、EndDate、PassWord | IntegratedMachine/DeviceInfoSync |
| 2 | DeviceSettingLogin | POST | Body:DeviceId、Account、Password | IntegratedMachine/DeviceSettingLogin |
| 3 | UploadEditWeight | POST | Body:FlagId、Weight、Operator、Remark、RecordId | IntegratedMachine/UploadEditWeight |
| 4 | SyncFaceFeature | GET | Query:LabId、StartDate、EndDate | IntegratedMachine/SyncFaceFeature |
| 5 | SyncFaceFeatureV2 | GET | 同上 | IntegratedMachine/SyncFaceFeatureV2 |
| 6 | GetStockInfo | GET | Query:LabId、DeviceId、KeyWord、ItemId、UserId、PageIndex、PageSize | IntegratedMachine/GetStockInfo |
| 7 | GetStockInfoV2 | GET | 同上 | IntegratedMachine/GetStockInfoV2 |
| 8 | GetItemInfoByFlagIdMoveStock | GET | Query:flagId | IntegratedMachine/GetItemInfoByFlagIdMoveStock |
| 9 | GetItemInfoByFlagIdAllStatus | GET | Query:flagId | IntegratedMachine/GetItemInfoByFlagIdAllStatus |
| 10 | GetMovingReagentInfoByFlagId | GET | Query:flagId | IntegratedMachine/GetMovingReagentInfoByFlagId |
| 11 | UploadWeightV2 | POST | Body:FlagId、Weight、UseWeight、Dosage、Operator、DeviceId、LockLogId、Whereabounts、KeeperName | IntegratedMachine/UploadWeightV2 |
| 12 | GetWaitSignCount | GET | Query:userId | IntegratedMachine/GetWaitSignCount |
| 13 | GetItemInfo | GET | Query:itemName、pageIndex=1、pageSize=10 | IntegratedMachine/GetItemInfo |
| 14 | GetShapeWeight | GET | Query:materialName、size、Unit | IntegratedMachine/GetShapeWeight |
| 15 | OpenBtLock | POST | Body:PartitionId、LabId、UserId、RequestKey、Authorizer、OpenType | IntegratedMachine/OpenBtLock |
| 16 | StandardSampleSign | POST | Body:ItemId、ItemName、Purity、Spec、Vender、Density、Mass、Unit、UserId、EngName、Level、CasNumber、FlagId、Weight、PartitionId、Layer、BatchNumber | IntegratedMachine/StandardSampleSign |
| 17 | ManualUploadUseMass | POST | Body:FlagId、UseMass、Operator、DeviceId | IntegratedMachine/ManualUploadUseMass |
| 18 | ManualUploadUseMassV2 | POST | Body:FlagId、UseMass、Operator、DeviceId、LockLogId、Whereabouts、KeeperName | IntegratedMachine/ManualUploadUseMass2(注意目标名是 Mass2) |
| 19 | OpenLockPhotoUpload | POST | Form:logId + 文件 user、authorizer(multipart) | IntegratedMachine/OpenLockPhotoUpload |
| 20 | CheckAuth | GET | Query:userId、partitionId | ⚠️ 目标为 IntegratedMachine/OpenLockPhotoUpload(疑似应为 CheckAuth,见 §11) |
| 21 | GetOperateList | GET | Query:userId、flagId、pageIndex=1、pageSize=10000 | IntegratedMachine/GetOperateList |
| 22 | PushItem | POST | Body:FlagId、OperateLockLogId、LockLogId、UserId、AuthUserId | IntegratedMachine/PushItem |
| 23 | CheckVersion | GET | Query:versionCode、deviceType | IntegratedMachine/CheckVersion |
| 24 | GetDensityByCasNumber | GET | Query:casNumber | IntegratedMachine/GetDensityByCasNumber |
| 25 | EditIcCard | POST | Body:UserId、IcId | IntegratedMachine/EditIcCard |
| 26 | EditUserFaceEigenValue(JSON 版) | POST | Body:UserId、FaceEigenValue | {schName}/v2/IntegratedMachine/EditUserFaceEigenValue |
| 27 | EditUserFaceEigenValue(文件版) | POST | Form:userId、faceEigenValue + file(multipart),路由 /api/{schName}/v2/IntegratedMachine/EditUserFaceEigenValue |
同名 v2 路径 |
| 28 | GetReagentSignHistory | GET | Query:userId、keyword、pageIndex、pageSize | IntegratedMachine/GetReagentSignHistory |
| 29 | DeleteReagentSignHistory | POST | Body:UserId、ItemId | IntegratedMachine/DeleteReagentSignHistory |
| 30 | GetPartitionByLabId | GET | Query:positionId | IntegratedMachine/GetPartitionByLabId |
| 31 | GetPositionByLabId | GET | 无 | IntegratedMachine/GetPositionByLabId |
| 32 | GetPositionInfo | GET | Query:labId、pageIndex=1、pageSize=5 | IntegratedMachine/GetPositionInfo |
| 33 | GetPositionInfo2 | GET | 同上 | IntegratedMachine/GetPositionInfo2 |
| 34 | GetPositionInfo3 | GET | Query:casNumber、pageIndex、pageSize | IntegratedMachine/GetPositionInfo3 |
| 35 | GetPartitionInfo | GET | Query:labId | IntegratedMachine/GetPartitionInfo |
| 36 | GetPartitionInfos | GET | Query:labId、deviceId | IntegratedMachine/GetPartitionInfos |
| 37 | GetMSDS | GET | Query:casNumber | IntegratedMachine/GetMsds(目标 M 小写) |
| 38 | CancelReagentScrap | POST | Body:FlagId | IntegratedMachine/CancelReagentScrap |
| 39 | PushReagentBatch | POST | Body:FlagId、PopLockLogId、LockLogId、AuthUserId、FlagInfos[{FlagId,PopLockLogId,LockLogId,AuthUserId}] | IntegratedMachine/PushReagentBatch |
| 40 | MoveReagentBatch | POST | Body:FlagInfos[{FlagId,OpenLockLogId}]、MoveToLabId | IntegratedMachine/MoveReagentBatch |
| 41 | GetLabInfosByUserId | GET | 无 | IntegratedMachine/GetLabInfosByUserId |
| 42 | GetMovingReagent | GET | 无 | IntegratedMachine/GetMovingReagent |
| 43 | GetWaitMoveInReagent | GET | 无 | IntegratedMachine/GetWaitMoveInReagent |
| 44 | ConfirmMoveReagent | POST | Body:FlagId、UseMass、Flags[{FlagId,UseMass}]、LabId、Layer、PartitionId | IntegratedMachine/ConfirmMoveReagent |
| 45 | CancelMoveReagent | POST | Body:FlagId | IntegratedMachine/CancelMoveReagent |
| 46 | PushReagentBatchBySignStock | POST | Body:FlagId、LockLogId、FlagInfos[{FlagId,LockLogId}]、PartitionId | IntegratedMachine/PushReagentBatchBySignStock |
| 47 | GetItemInfoByFlagIdV6 | GET | Query:flagId | IntegratedMachine/GetItemInfoByFlagIdV6 |
| 48 | UploadWeightNotLock | POST | Body:DeviceId、FlagId、Operator、Weight、Whereabouts | IntegratedMachine/UploadWeightNotLock |
| 49 | ItemScrapedNetWeightNotLock | POST | Body:LabId、FlagId、ReasonId、ScrapedMass、ScrapedUserId、ScrapedDate、ScrapeRemarks、IsExhaust、Status | IntegratedMachine/ItemScrapedNetWeightNotLock |
| 50 | ManualUploadUseMassNotLock | POST | Body:FlagId、UseMass、Operator、DeviceId、Whereabouts | IntegratedMachine/ManualUploadUseMassNotLock |
| — | GetPreSignReagentInfo | GET | Query:tagId | IntegratedMachine/GetPreSignReagentInfo |
3. StockController(库存/标签)
路由:/api/{tenantCode}/Stock/{Action}。除 UpdateReagentMass 外全部为 AN1 透传。
| # | 端点 | 方法 | 请求 | 下游调用 |
|---|---|---|---|---|
| 1 | SetTagPrintState | POST | Body:TagId、DeviceId | AN1 Stock/SetTagPrintState |
| 2 | SetTagPrintStateV2 | POST | Body:TagId[](数组)、DeviceId | AN1 Stock/SetTagPrintStateV2 |
| 3 | GetTagPrintHistory | GET | Query:tagId | ⚠️ AN1 Stock/SetTagPrintStateV2?tagId=(疑似应为 GetTagPrintHistory,见 §11) |
| 4 | UpdateReagentWeight | POST | Body:TagId、Weight、UseType、MaterialType | AN1 Stock/UpdateReagentWeight |
| 5 | PopReagentBatch | POST | Body:OpenLockId、FlagIds[]、Whereabouts | AN1 Stock/PopReagentBatch |
| 6 | GetNotUsePopReagentList | GET | 无 | AN1 Stock/GetNotUsePopReagentList |
| 7 | PushReagentNotLock | POST | Body:List<PushReagentNotLockDTO>(FlagIds[]、PopLockLogId) |
AN1 Stock/PushReagentNotLock |
| 8 | SetOrganizeStockStatus | POST | Body:PartitionId、Status、OperateUser、AuthUser、OgsId | AN1 Stock/SetOrganizeStockStatus |
| 9 | UpdateReagentMass | POST | Body:FlagId(必填)、weight(克)、dosage、OgsId(必填)、UserId、PartitionId、PositionId | ⭐ 万欣 AddQrJiaoZhun(试剂校准):gh=UserId、gzbh=AN1-{PositionId}、qrsl=”1”、CSZL=weight×1000、PZZL=”0”、CBH=PartitionId。成功”更新成功!” |
| 10 | ReagentPackageSplit | POST | Body:ContainerWeight、Mass、SourceTagId、OriginalWeight | AN1 Stock/ReagentPackageSplit |
| 11 | GetPackageSplitHistory | GET | 无 | AN1 Stock/GetPackageSplitHistory |
4. AuthController(鉴权)
路由:/api/{tenantCode}/Auth/{Action}。
| 端点 | 方法 | 请求 | 下游 |
|---|---|---|---|
| CheckIsAllowAuth | POST | Body:UserId、IcCard、PartitionId | AN1 auth/CheckIsAllowAuth(透传) |
5. LabController(实验室)
路由:/api/{tenantCode}/Lab/{Action}。
| 端点 | 方法 | 请求 | 下游 |
|---|---|---|---|
| GetAllLabs | GET | 无 | AN1 Lab/GetAllLabs(透传) |
6. OperateController(操作记录)
路由:/api/{tenantCode}/Operate/{Action}。
| 端点 | 方法 | 请求 | 下游 |
|---|---|---|---|
| GetOpenLockList | GET | Query:userId、flagId、pageIndex=1、pageSize=10000 | AN1 Operate/GetOpenLockList(透传) |
| CheckLockLogIsNot | GET | Query:userId | AN1 Operate/CheckLockLogIsNot(透传) |
7. SettController(设置)
路由:/api/{tenantCode}/Sett/{Action}。
| 端点 | 方法 | 请求 | 下游 |
|---|---|---|---|
| SyncDeviceConfig | GET | Query:deviceId | AN1 Sett/SyncDeviceConfig(透传) |
8. WindMachineController(风机)
路由:/api/{tenantCode}/WindMachine/{Action}。全部 AN1 透传。
| # | 端点 | 方法 | 请求 | AN1 目标 |
|---|---|---|---|---|
| 1 | GetGroupInfo | GET | 无 | WindMachine/GetGroupInfo |
| 2 | GetDeviceInfo | GET | Query:groupId | ⚠️ WindMachine/GetGroupInfo?groupId=(疑似应为 GetDeviceInfo,见 §11) |
| 3 | ControlDeviceGroup | POST | Body:GroupId、ControlType | WindMachine/ControlDeviceGroup |
| 4 | SetGroupRule | POST | Body:BeginTime、EndTime、IntervalTime、RuleType、RunTime、GroupId | WindMachine/SetGroupRule |
| 5 | GetRuleByGroupId | POST | Query:groupId(无 Body) | WindMachine/GetRuleByGroupId?groupId=(POST 入口但 GET 转发) |
9. ElectronicScreenController(电子屏)
路由:/api/{schCode}/ElectronicScreen/{Action}。全部 AN1 透传(GET)。
| # | 端点 | 请求 | AN1 目标(同名) |
|---|---|---|---|
| 1 | GetWarningCount | Query:id | ElectronicScreen/GetWarningCount |
| 2 | GetWarningInfo | Query:id、pageIndex=1、pageSize=10 | ElectronicScreen/GetWarningInfo |
| 3 | GetPartition | Query:positionId、pageIndex=1、pageSize=10 | ElectronicScreen/GetPartition |
| 4 | GetPartitionStock | Query:partitionId | ElectronicScreen/GetPartitionStock |
| 5 | GetWarnCount | Query:id | ElectronicScreen/GetWarnCount |
| 6 | GetWarnList | Query:id、warnType | ElectronicScreen/GetWarnList |
| 7 | GetPersonNoUsageWarnCount | Query:userId | ElectronicScreen/GetPersonNoUsageWarnCount |
| 8 | GetIncompatDetail | Query:PartitionId、CasNumber、layer | ElectronicScreen/GetIncompatDetail |
10. HomeController / BtlockmpController
| 端点 | 方法 | 下游 |
|---|---|---|
GET /Home/Index |
GET | AN1 home/index(直接在 AN1 根路径,无租户前缀;透传) |
GET /api/Btlockmp/Visit |
GET | AN1 home(⚠️ 构造传入的 “btlockmp” 租户名实际无效——BaseController 忽略该参数仍用 CustomerSettings.TenantName 的 HttpClient,见 §11) |
11. 已知问题记录
整理文档时发现的代码疑点(未改动,供排查):
- CheckAuth 转发目标错误:
IntegratedMachine/CheckAuth转发到 AN1 的OpenLockPhotoUpload?userId=&partitionId=,两个端点语义明显不符(IntegratedMachineController.cs:1121 附近) - GetTagPrintHistory 转发目标错误:转发到 AN1
Stock/SetTagPrintStateV2?tagId=,查询历史却调了”设置状态”(StockController.cs:48) - GetDeviceInfo 转发目标错误:转发到 AN1
WindMachine/GetGroupInfo?groupId=(WindMachineController.cs:31) - BtlockmpController 租户名无效:
base(httpClientFactory, "btlockmp")的第二参数在 BaseController 中被忽略,实际仍用CustomerSettings.TenantName(WX)的 HttpClient,但转发时又用_httpClientForAn1,行为等同于普通 AN1 透传 - GetStockInfo/GetStockInfoV2 Query 重复:
pageSize拼了两次(无害,AN1 取后者) - Login 成功判定笔误:第一步万欣请求后判断的是
response1.StatusCode而非response2.StatusCode(IntegratedMachineController.cs:89)
附:万欣接口调用总览(按本文档端点归集)
| 万欣接口 | 调用它的网关端点 |
|---|---|
| GetUserInfo | Login、WXCheckAuth、GetWXUser |
| GetLockersByNo | GetLockerInfo |
| GetLockerDatumQrByNo | GetStockInfoByPartition |
| GetRepertory | GetInboundOrderInfo |
| GetBorrow + GetDatumlistById | GetPullOrderInfo |
| GetDatumPrintQueue | GetItemInfoByFlagIdV5、GetItemInfoAndOperateByFlagIdV2、ItemScrapedNetWeight、CollarReagent、ReturnItem、GetItemInfoByTagId、GetPreSignReagentInfoByQrCode(V2) |
| AddQrRepertoryWxpNew | ItemStockSign |
| AddQrBorrowWxpNew | CollarReagent |
| AddQrBorrowRuKuWxp | BorrowRuKu |
| AddQrBorrowBackWxpNew | ReturnItem |
| AddQrBorrowLossWxpNew | ItemScrapedNetWeight |
| AddQrJiaoZhun | Stock/UpdateReagentMass |
| GetQrRecord | GetItemInfoAndOperateByFlagIdV2 |
| AddQrPrintQueueRFID | BindWXQrcodeAndRFID |
最后编辑:阮德明 更新时间:2026-09-17 11:34