3. Request 規格
傳輸格式: JSON
Content-Type: application/json
3.1 取消一般入庫單 (cancelStockIn)
| 欄位 | 型別 | 必填 | 說明 | MES 來源 |
| companyID | string | Y | 公司別 | COMPANYID |
| userId | string | Y | 操作人員 | 當前登入者 |
| stock_in_no | string | Y | 入庫單號(單別-單號) | TL011 + "-" + TL012 |
3.2 取消委外入庫單 (outsourcingProcess)
| 欄位 | 型別 | 必填 | 說明 | MES 來源 |
| companyID | string | Y | 公司別 | COMPANYID |
| userId | string | Y | 操作人員 | 當前登入者 |
| outsource_no | string | Y | 委外單號(單別-單號) | TL011 + "-" + TL012 |
| source_type | string | Y | 還原類型(0/1/2) | "0" (出貨還原) |
欄位來源說明
stock_in_no / outsource_no = SFT_TRANSORDER_LINE.TL011 + "-" + SFT_TRANSORDER_LINE.TL012
TL011/TL012 是由 stockin.data.create 成功後,ERP 回傳的 TB001/TB002 所寫入。
7. JSON 範例
Request - 取消一般入庫單
{
"companyID": "COMP01",
"userId": "EMP001",
"stock_in_no": "5101-20260319001"
}
Request - 取消委外入庫單
{
"companyID": "COMP01",
"userId": "EMP001",
"outsource_no": "5902-20260319001",
"source_type": "0"
}
Response (成功)
{
"code": 200,
"msg": "入庫單取消成功"
}
Response (失敗)
{
"code": 500,
"msg": "入庫單已過帳,無法取消"
}
8. Race Condition 風險說明
已知問題:取消出站時 TL011/TL012 為空
當使用者在 ERP 回傳之前取消出站時,由於 TL011/TL012 尚未被回寫,取消 API 不會被呼叫。
這會導致 MES 與 ERP 資料不一致。
時間線範例
問題原因
if(!SftTransorderLine.getTl011().equals("") && !SftTransorderLine.getTl012().equals("")){
}
處理建議
| 方案 | 說明 | 影響 |
| 立即處理 | 手動至 ERP 作廢該入庫單 | 需人工介入 |
| 等待機制 | 取消出站時等待 ERP 回傳完成 | 需程式修改 |
| Lock 機制 | 出站進行中禁止取消操作 | 需程式修改 |
| 定期比對 | 排程比對 MES 與 ERP 單據狀態 | 需新增功能 |
參考案例
詳見 CLAUDE.md 中 2026-03-12 記錄的「0000675600 取消出站 outsourcingProcess 未呼叫問題分析」