2022-09-05

# 實驗數(shù)據(jù)查詢接口文檔

## 接口概述

本文檔定義了實驗數(shù)據(jù)相關(guān)的查詢接口,包括經(jīng)驗數(shù)據(jù)查詢、稱量數(shù)據(jù)查詢以及兩者的組合查詢接口。接口用于獲取樣品的實驗數(shù)據(jù),支持多樣品編號批量查詢,返回結(jié)構(gòu)化的實驗結(jié)果數(shù)據(jù)。

## 基礎(chǔ)信息

- **接口命名空間**:`Me.Services.EmpiricalEdata`

- **接口名稱**:`IEmpiricalEdataServices`

- **數(shù)據(jù)傳輸對象(DTO)命名空間**:`Me.Services.SDMS.DTO`

## 數(shù)據(jù)模型定義

### 1. 經(jīng)驗數(shù)據(jù)返回實體(`EmpiricalEdataRes`)

| 屬性名 | 類型 | 說明 |

|--------|------|------|

| `Id` | `Guid` | 數(shù)據(jù)唯一標(biāo)識ID |

| `SampleNo` | `string` | 樣品編號 |

| `SampleTime` | `DateTime` | 最后修改時間 |

| `SampleType` | `string` | 實驗類別(非"稱量"類型) |

| `ItemName` | `string` | 項目名稱 |

| `SampleIndex` | `int` | 實驗次數(shù) |

| `ParamName` | `string` | 實驗參數(shù)名稱 |

| `ParamValue` | `string` | 實驗參數(shù)值 |

| `EquipmentName` | `string` | 設(shè)備名稱 |

| `EquipmentID` | `Guid` | 設(shè)備唯一標(biāo)識ID |

| `FileName` | `string` | 關(guān)聯(lián)文件名稱 |

| `SourceFilePath` | `string` | 文件在設(shè)備中的原始路徑 |

| `JumpURL` | `string` | 文件訪問跳轉(zhuǎn)路徑(已拼接基礎(chǔ)URL) |

### 2. 稱量數(shù)據(jù)返回模型(`WeightRes`)

| 屬性名 | 類型 | 說明 |

|--------|------|------|

| `Id` | `Guid` | 數(shù)據(jù)唯一標(biāo)識ID |

| `SampleNo` | `string` | 樣品編號 |

| `SampleTime` | `DateTime` | 最后修改時間 |

| `SampleType` | `string` | 實驗類別(固定為"稱量") |

| `EquipmentName` | `string` | 設(shè)備名稱 |

| `EquipmentID` | `Guid` | 設(shè)備唯一標(biāo)識ID |

| `ItemName` | `string` | 項目名稱 |

| `SampleIndex` | `int` | 實驗次數(shù)(從參數(shù)名提取的數(shù)字) |

| `ParamName` | `string` | 稱量參數(shù)名稱 |

| `ParamValue` | `string` | 稱量參數(shù)值 |

| `OperatorName` | `string` | 操作人姓名 |

### 3. 組合結(jié)果類(`SampleDataCombinedResult`)

| 屬性名 | 類型 | 說明 |

|--------|------|------|

| `EmpiricalData` | `List<EmpiricalEdataRes>` | 經(jīng)驗數(shù)據(jù)列表(非稱量類型) |

| `WeightData` | `List<WeightRes>` | 稱量數(shù)據(jù)列表 |

## 接口詳情

### 1. 經(jīng)驗數(shù)據(jù)查詢接口

#### 方法定義

```csharp

Task<List<EmpiricalEdataRes>> GetEmpiricalListAsync(string sampleNo);

```

#### 功能描述

查詢非稱量類型的實驗數(shù)據(jù),支持通過多個樣品編號批量查詢。

#### 參數(shù)說明

| 參數(shù)名 | 類型 | 必傳 | 說明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 樣品編號,多個編號以英文逗號(`,`)分隔,例如:`"S2024001,S2024002"` |

#### 返回值

`Task<List<EmpiricalEdataRes>>` - 經(jīng)驗數(shù)據(jù)列表,包含符合條件的所有非稱量類型實驗數(shù)據(jù)。

#### 篩選邏輯

- 僅返回`IsEnable=true`且`IsDelete=false`的數(shù)據(jù)

- 排除`SampleType="圖譜"`和`SampleType="稱量"`的數(shù)據(jù)

- 按樣品編號前綴匹配(`StartsWith`)查詢

- 自動關(guān)聯(lián)`CollectionFileHistory`表獲取文件路徑信息

- 結(jié)果會進(jìn)行路徑拼接(基礎(chǔ)URL+文件名)和去重處理

### 2. 稱量數(shù)據(jù)查詢接口

#### 方法定義

```csharp

Task<List<WeightRes>> GetWeightListAsync(string sampleNo);

```

#### 功能描述

專門查詢"稱量"類型的實驗數(shù)據(jù),支持通過多個樣品編號批量查詢。

#### 參數(shù)說明

| 參數(shù)名 | 類型 | 必傳 | 說明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 樣品編號,多個編號以英文逗號(`,`)分隔 |

#### 返回值

`Task<List<WeightRes>>` - 稱量數(shù)據(jù)列表,包含符合條件的所有稱量類型實驗數(shù)據(jù)。

#### 篩選邏輯

- 僅返回`IsEnable=true`且`IsDelete=false`的數(shù)據(jù)

- 僅包含`SampleType="稱量"`的數(shù)據(jù)

- 按樣品編號前綴匹配(`StartsWith`)查詢

- 自動從`ParamName`中提取數(shù)字作為`SampleIndex`(默認(rèn)值為1)

- 結(jié)果會進(jìn)行去重處理

### 3. 組合數(shù)據(jù)查詢接口

#### 方法定義

```csharp

Task<SampleDataCombinedResult> GetCombinedSampleDataAsync(string sampleNo);

```

#### 功能描述

同時查詢經(jīng)驗數(shù)據(jù)和稱量數(shù)據(jù),返回組合結(jié)果,減少重復(fù)調(diào)用開銷。

#### 參數(shù)說明

| 參數(shù)名 | 類型 | 必傳 | 說明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 樣品編號,多個編號以英文逗號(`,`)分隔 |

#### 返回值

`Task<SampleDataCombinedResult>` - 組合結(jié)果對象,包含經(jīng)驗數(shù)據(jù)列表和稱量數(shù)據(jù)列表。

#### 實現(xiàn)邏輯

- 內(nèi)部并行調(diào)用`GetEmpiricalListAsync`和`GetWeightListAsync`

- 等待兩個查詢都完成后合并結(jié)果

- 保持各自的篩選、去重和路徑處理邏輯

## 調(diào)用示例

### 請求示例(偽代碼)

```csharp

// 實例化服務(wù)

IEmpiricalEdataServices service = new EmpiricalEdataServices();

// 單個樣品查詢

var empiricalData = await service.GetEmpiricalListAsync("(2024)SPXW0776001");

var weightData = await service.GetWeightListAsync("(2024)SPXW0776001");

// 多個樣品查詢

var combinedData = await service.GetCombinedSampleDataAsync("(2024)SPXW0776001,(2024)SPXW0776002");

```

### 返回示例(JSON結(jié)構(gòu))

```json

{

? "EmpiricalData": [

? ? {

? ? ? "Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",

? ? ? "SampleNo": "(2024)SPXW0776001",

? ? ? "SampleTime": "2024-08-13T10:00:00",

? ? ? "SampleType": "光譜分析",

? ? ? "ItemName": "成分檢測",

? ? ? "SampleIndex": 1,

? ? ? "ParamName": "濃度",

? ? ? "ParamValue": "0.5mg/L",

? ? ? "EquipmentName": "光譜儀A",

? ? ? "EquipmentID": "3fa85f64-5717-4562-b3fc-2c963f66afa7",

? ? ? "FileName": "result.csv",

? ? ? "SourceFilePath": "C:\\data\\result.csv",

? ? ? "JumpURL": "http://file-server/result.csv"

? ? }

? ],

? "WeightData": [

? ? {

? ? ? "Id": "3fa85f64-5717-4562-b3fc-2c963f66afa8",

? ? ? "SampleNo": "(2024)SPXW0776001",

? ? ? "SampleTime": "2024-08-13T09:30:00",

? ? ? "SampleType": "稱量",

? ? ? "EquipmentName": "電子天平B",

? ? ? "EquipmentID": "3fa85f64-5717-4562-b3fc-2c963f66afa9",

? ? ? "ItemName": "樣品稱量",

? ? ? "SampleIndex": 2,

? ? ? "ParamName": "重量_2",

? ? ? "ParamValue": "2.5g",

? ? ? "OperatorName": "張三"

? ? }

? ]

}

```

## 注意事項

1. **參數(shù)格式**:`sampleNo`參數(shù)需嚴(yán)格使用英文逗號分隔,不可包含空格

2. **性能優(yōu)化**:批量查詢時建議樣品編號數(shù)量不超過50個,避免查詢超時

3. **去重邏輯**:返回結(jié)果已自動去重,依賴`EmpiricalEdataRes`和`WeightRes`的`Equals`和`GetHashCode`實現(xiàn)

4. **路徑處理**:`JumpURL`已自動拼接基礎(chǔ)URL并轉(zhuǎn)換為斜杠(`/`)分隔的格式,可直接用于訪問

5. **大小寫敏感**:樣品編號匹配為不區(qū)分大小寫(`StartsWith`方法使用`StringComparison.OrdinalIgnoreCase`)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容