ข้อมูลพื้นฐาน
ชื่อ API
wo.scrap.data.process
ชื่องานภายใน
woScrapDataProcess
รูปแบบการส่ง
JSON (Content-Type: application/json)
TRANSORDERTYPE
58 (รับเข้าคลังของเสีย)
เวลาที่ทริกเกอร์
ยกเลิกออกจากสถานี
CancelCheckOut
ดำเนินการโดยผู้ใช้
ค้นหาประเภทใบโอน
TRANSORDERTYPE
SFT_TRANSORDER_LINE
TYPE
= 58?
ใช่
woScrapDataProcess
ยกเลิกใบรับสินค้าเสีย
doc_no = TL011-TL012
✓
=59 → outsourcingProcess
อื่นๆ → cancelStockIn
ลอจิกการตัดสินยกเลิก API
เมื่อยกเลิกการออกจากสถานี ระบบจะตัดสินว่าจะเรียก API ยกเลิกตัวไหนโดยอ้างอิงจาก SFT_TRANSORDER_LINE.TRANSORDERTYPE:
TRANSORDERTYPE
ประเภทเอกสาร
API ที่เรียก
ชื่องาน
58
รับเข้าคลังของเสีย
wo.scrap.data.process
woScrapDataProcess
59
รับเข้าคลังจ้างผลิต
outsourcing.process
outsourcingProcess
อื่นๆ
รับเข้าคลังทั่วไป
stockin.data.process
cancelStockIn
ตำแหน่งโค้ด
ลอจิกการตัดสินอยู่ในเมธอด GeneralUpdater.excuteDeleteErpTransOrders()
บรรทัดที่ 1577-1592
พารามิเตอร์ Request
ฟิลด์
ชื่อฟิลด์ ERP
ประเภท
จำเป็น
คำอธิบาย
รหัสบริษัท
enterprise_no
String
จำเป็น
รหัสองค์กร
รหัสโรงงาน
site_no
String
จำเป็น
รหัสโรงงาน/ฝ่าย
เลขที่ใบรับสินค้าเสีย
doc_no
String
จำเป็น
เลขที่ใบรับเข้าคลังที่จะยกเลิก (รูปแบบ: TL011-TL012)
รูปแบบเลขที่ใบรับเข้าคลัง
รูปแบบเลขที่ใบรับเข้าคลังเป็น TL011-TL012 เช่น: 58-20260319001
ค่านี้มาจาก doc_no ที่ ERP ส่งกลับมาเมื่อสร้างใบรับสินค้าเสีย เก็บไว้ใน SFT_TRANSORDER_LINE
ตัวอย่าง Request
รูปแบบ 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>
รูปแบบ Response
Response สำเร็จ (code=200)
{
"code": 200,
"msg": "ยกเลิกใบรับสินค้าเสียสำเร็จ",
"ERPMessage": {
"description": "ประมวลผลสำเร็จ",
"doc_no": "58-20260319001"
}
}
Response ล้มเหลว (code=500)
{
"code": 500,
"msg": "ยกเลิกใบรับสินค้าเสียล้มเหลว",
"ERPMessage": {
"description": "ใบรับเข้าคลังยืนยันแล้ว ไม่สามารถยกเลิกได้"
}
}
คำอธิบายฟิลด์ Response
ฟิลด์
ประเภท
คำอธิบาย
code
Integer
200=สำเร็จ, 500=ล้มเหลว
msg
String
ข้อความการประมวลผล
ERPMessage.description
String
ข้อความรายละเอียดจาก ERP
ลอจิกการล้างข้อมูล MES
หลังจากยกเลิกใบรับสินค้าเสียสำเร็จ MES จะล้างบันทึกใบโอนที่เกี่ยวข้อง:
ERP ยกเลิกสำเร็จ
code=200
ล้างบันทึกใบโอน
SFT_TRANSORDER_LINE
TL011 = '', TL012 = ''
หรือลบทั้งแถว
✓
SQL การล้างข้อมูล
-- ล้างเลขที่ ERP ใน SFT_TRANSORDER_LINE
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();
// ตัดสินว่าจะเรียก API ไหนตาม TRANSORDERTYPE
...
} else {
// TL011/TL012 ว่าง ข้ามการเรียก ERP
}
วิธีการจัดการที่แนะนำ
รอ ERP ตอบกลับสำเร็จก่อนอนุญาตให้ยกเลิกหลังออกจากสถานี
เพิ่มกลไก Lock เพื่อป้องกันการดำเนินการพร้อมกัน
เปรียบเทียบสถานะใบรับสินค้าเสีย MES กับ ERP เป็นระยะ
ให้ฟังก์ชันยกเลิกเพิ่มเติมด้วยตนเอง
ตารางข้อมูลที่เกี่ยวข้อง
ตารางข้อมูล
คำอธิบาย
ฟิลด์ที่ได้รับผลกระทบ
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
การจัดการข้อผิดพลาด
สถานการณ์ข้อผิดพลาด
Response จาก ERP
วิธีการจัดการ MES
ใบรับเข้าคลังยืนยันแล้ว
code=500, ใบรับเข้าคลังยืนยันแล้ว
แสดงข้อความผิดพลาด ต้องจัดการด้วยตนเอง
ไม่มีใบรับเข้าคลัง
code=500, ไม่มีใบรับเข้าคลัง
ล้างบันทึก MES ดำเนินการยกเลิกต่อ
หมดเวลาเชื่อมต่อ
SocketTimeoutException
บันทึก LOG ต้องยกเลิกเพิ่มเติมด้วยตนเอง
บันทึก LOG
// ไฟล์ LOG: logs/ERPReturnErrorRec.log
[ERP_SEND_ERROR] taskName=woScrapDataProcess, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] 送出内容={"doc_no":"58-20260319001"}