CUHKSZApiGateway 网关接口文档(Controller 端点明细)

整理日期:2026-09-17

范围:网关自身暴露的全部 HTTP 端点(10 个 Controller、约 100 个 Action),每个端点注明:地址、HTTP 方法、请求参数、返回说明,以及内部调用了哪个万欣接口(WX)或 AN1 平台接口。

万欣接口本身的字段详情见《接口详细文档.md》;网关与万欣的差异见《接口对比差异.md》。


目录


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)→ BaseAddress CustomerSettings.GotoAddress(当前 http://10.40.6.169:9002/api/)
  • 万欣系统:WXPostAsync/WXGetAsync(WXHeaderCapture 透传 Header + NLog 记录入参返回)→ BaseAddress CustomerSettings.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. 已知问题记录

整理文档时发现的代码疑点(未改动,供排查):

  1. CheckAuth 转发目标错误:IntegratedMachine/CheckAuth 转发到 AN1 的 OpenLockPhotoUpload?userId=&partitionId=,两个端点语义明显不符(IntegratedMachineController.cs:1121 附近)
  2. GetTagPrintHistory 转发目标错误:转发到 AN1 Stock/SetTagPrintStateV2?tagId=,查询历史却调了”设置状态”(StockController.cs:48)
  3. GetDeviceInfo 转发目标错误:转发到 AN1 WindMachine/GetGroupInfo?groupId=(WindMachineController.cs:31)
  4. BtlockmpController 租户名无效:base(httpClientFactory, "btlockmp") 的第二参数在 BaseController 中被忽略,实际仍用 CustomerSettings.TenantName(WX)的 HttpClient,但转发时又用 _httpClientForAn1,行为等同于普通 AN1 透传
  5. GetStockInfo/GetStockInfoV2 Query 重复:pageSize 拼了两次(无害,AN1 取后者)
  6. 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-15 16:18
最后编辑:阮德明  更新时间:2026-09-17 11:34