← 返回 API 列表

不良品入庫取消

CANCEL MES → ERP
wo.scrap.data.process

當 MES 取消出站時,若該筆移轉單為報廢入庫類型(TRANSORDERTYPE=58), 呼叫此 API 通知 ERP 取消對應的不良品入庫單。

基本資訊

API 名稱
wo.scrap.data.process
內部任務名稱
woScrapDataProcess
傳輸格式
JSON (Content-Type: application/json)
案號
0189144
API 編號
api-2192
TRANSORDERTYPE
58 (報廢入庫)

觸發時機

取消出站 CancelCheckOut 使用者操作 查詢移轉單類型 TRANSORDERTYPE SFT_TRANSORDER_LINE TYPE = 58? woScrapDataProcess 取消不良品入庫 doc_no = TL011-TL012 =59 → outsourcingProcess 其他 → cancelStockIn

取消 API 判斷邏輯

取消出站時,系統根據 SFT_TRANSORDER_LINE.TRANSORDERTYPE 判斷呼叫哪個取消 API:

TRANSORDERTYPE 單據類型 呼叫的 API 任務名稱
58 報廢入庫(不良品) wo.scrap.data.process woScrapDataProcess
59 委外入庫 outsourcing.process outsourcingProcess
其他 一般入庫 stockin.data.process cancelStockIn
程式碼位置
判斷邏輯位於 GeneralUpdater.excuteDeleteErpTransOrders() 方法, 第 1577-1592 行。

請求參數

欄位 ERP 欄位名 類型 必填 說明
公司代碼 enterprise_no String 必填 企業代碼
工廠代碼 site_no String 必填 工廠/廠別代碼
不良品入庫單號 doc_no String 必填 要取消的入庫單號(格式: TL011-TL012)
入庫單號格式
入庫單號格式為 TL011-TL012,例如:58-20260319001。 此值來自建立不良品入庫時 ERP 回傳的 doc_no,儲存於 SFT_TRANSORDER_LINE

請求範例

JSON 格式

{
  "enterprise_no": "COMP01",
  "site_no": "SITE01",
  "doc_no": "58-20260319001"
}

ERP XML 格式 (WFERP)

<parameters>
  <parameter key="enterprise_no" type="string">COMP01</parameter>
  <parameter key="site_no" type="string">SITE01</parameter>
  <parameter key="doc_no" type="string">58-20260319001</parameter>
</parameters>

回應格式

成功回應 (code=200)

{
  "code": 200,
  "msg": "不良品入庫單取消成功",
  "ERPMessage": {
    "description": "處理成功",
    "doc_no": "58-20260319001"
  }
}

失敗回應 (code=500)

{
  "code": 500,
  "msg": "不良品入庫單取消失敗",
  "ERPMessage": {
    "description": "入庫單已確認,無法取消"
  }
}

回應欄位說明

欄位 類型 說明
code Integer 200=成功, 500=失敗
msg String 處理訊息
ERPMessage.description String ERP 回傳的詳細訊息

MES 清除邏輯

取消不良品入庫成功後,MES 會清除相關移轉單記錄:

ERP 取消成功 code=200 清除移轉單記錄 SFT_TRANSORDER_LINE TL011 = '', TL012 = '' 或整筆刪除

清除 SQL

-- 清除 SFT_TRANSORDER_LINE 的 ERP 單號
UPDATE SFT_TRANSORDER_LINE
SET TL011 = '',
    TL012 = ''
WHERE TRANSORDERTYPE = '58'
  AND TL011 = :TL011
  AND TL012 = :TL012

-- 或刪除整筆移轉單記錄(視系統設定)
DELETE FROM SFT_TRANSORDER_LINE
WHERE TRANSORDERTYPE = '58'
  AND TRANSNO = :TRANSNO

Race Condition 風險

重要注意事項
與其他取消 API 相同,取消不良品入庫也存在 Race Condition 風險:

情境:出站後立即取消,但 ERP 尚未回傳不良品入庫單號
結果:TL011/TL012 為空,無法呼叫 ERP 取消
後果:MES 已取消出站,但 ERP 不良品入庫單仍存在

判斷邏輯

// GeneralUpdater.java:1571-1575
if(!SftTransorderLine.getTl011().equals("") && !SftTransorderLine.getTl012().equals("")){
    // TL011/TL012 有值,才呼叫 ERP 取消
    String stock_in_no = SftTransorderLine.getTl011() + "-" + SftTransorderLine.getTl012();
    // 根據 TRANSORDERTYPE 判斷呼叫哪個 API
    ...
} else {
    // TL011/TL012 為空,跳過 ERP 呼叫
}
建議處理方式
  1. 出站後等待 ERP 回傳成功再允許取消操作
  2. 加入 Lock 機制防止同時操作
  3. 定期比對 MES 與 ERP 不良品入庫單狀態
  4. 提供手動補取消功能

相關資料表

資料表 說明 影響欄位
SFT_TRANSORDER_LINE 移轉單明細 TL011, TL012 (清空或刪除整筆)
SftTransorder 移轉單頭檔 TO007, TO008 (可能需要清空)

程式碼位置

功能 檔案路徑 行號
取消出站入口 SFT_core/src/com/dci/sft/update/GeneralUpdater.java 1550-1612
TRANSORDERTYPE 判斷 SFT_core/src/com/dci/sft/update/GeneralUpdater.java 1577-1592
API 路由 SFT_ERPIntegrate/src/com/dci/sft/erp/XmlToERP_handler.java 96-98
XML 參數組裝 SFT_ERPIntegrate/src/com/dci/sft/erp/webservice/SendFormS.java 1811-1815

錯誤處理

錯誤情境 ERP 回應 MES 處理方式
入庫單已確認 code=500, 入庫單已確認 顯示錯誤訊息,需人工處理
入庫單不存在 code=500, 入庫單不存在 清除 MES 記錄,繼續取消流程
連線超時 SocketTimeoutException 記錄 LOG,需手動補取消

LOG 記錄

// 日誌檔案:logs/ERPReturnErrorRec.log

[ERP_SEND_ERROR] taskName=woScrapDataProcess, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] 送出内容={"doc_no":"58-20260319001"}