1. ข้อมูลพื้นฐาน
| รายการ | คำอธิบาย |
| ชื่อ API ภาษาไทย | ยกเลิกใบรับสินค้าจ้างผลิต (คืนค่าการรับสินค้าจ้างผลิต) |
| รหัส CROSS API | outsourcing.process |
| ชื่องาน MES | outsourcingProcess |
| เส้นทาง ESB | /outsourcingProcess |
| อ้างอิง DSMS | api-2058 |
| ทิศทางการเรียก | MES → ERP |
| เงื่อนไขทริกเกอร์ | TRANSORDERTYPE = "59" + TL011/TL012 ไม่ว่าง |
| รูปแบบ Request | JSON (Content-Type: application/json) |
| วิธีการส่ง | HTTP POST ผ่าน ESB |
| ซิงโครนัส/อะซิงโครนัส | เรียกแบบซิงโครนัส |
ตารางอ้างอิงพารามิเตอร์ source_type
| source_type | คำอธิบาย | สถานการณ์ใช้งาน |
| 0 | คืนค่าการจัดส่ง | ยกเลิก CheckOut (ส่งจ้างผลิตออก) |
| 1 | คืนค่าการรับสินค้า | ยกเลิก CheckIn (รับสินค้าจ้างผลิต) |
| 2 | คืนค่าการคืนสินค้า | ยกเลิกการคืนสินค้า |
2. กระบวนการทางธุรกิจ
การเชื่อมโยงโค้ด
- การตัดสินใจยกเลิก:
GeneralUpdater.java:1571-1605
- ตรวจสอบ TL011/TL012:
GeneralUpdater.java:1571
- ตรวจสอบ TRANSORDERTYPE:
GeneralUpdater.java:1577
- ประกอบ JSON:
transOrder.put("outsource_no", stock_in_no)
API ที่เกี่ยวข้อง
ยกเลิกใบรับสินค้าจ้างผลิต (outsourcingProcess) ใช้คู่กับสร้างใบรับสินค้าจ้างผลิต (outsourcingPurchaseStockinCreate)
เมื่อยกเลิกต้องใช้ TB001/TB002 ที่ ERP ส่งกลับมาหลังสร้างสำเร็จ (เก็บใน TL011/TL012)
3. ข้อกำหนด Request
รูปแบบการส่ง: JSON
Content-Type: application/json (HttpClient.java:25)
ฟิลด์ Request (Parameter)
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย | แหล่ง MES |
| enterprise_no | string | Y | รหัสบริษัท | COMPANYID (sftcompany) |
| site_no | string | Y | ไซต์ | COMPANYID (sftcompany) |
| source_no | string | Y | หมายเลขต้นทาง (หมายเลขใบรับสินค้าจ้างผลิต) | outsource_no (TL011 + "-" + TL012) |
| source_type | string | Y | ประเภทการคืนค่า (0/1/2) | "0" (คืนค่าการจัดส่ง) |
| objective_doc_no | string | Y | หมายเลขเอกสารเป้าหมาย (เหมือน source_no) | outsource_no |
โครงสร้าง outsourcing_info_data
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย | แหล่ง MES |
| source_no | string | N | หมายเลขต้นทาง | สตริงว่าง |
| plot_no | string | N | หมายเลขล็อต | สตริงว่าง |
| purchase_seq | numeric | N | ลำดับการจัดซื้อ | สตริงว่าง |
คำอธิบายแหล่งข้อมูลฟิลด์
outsource_no = SFT_TRANSORDER_LINE.TL011 + "-" + SFT_TRANSORDER_LINE.TL012
TL011/TL012 ถูกเขียนจาก TB001/TB002 ที่ ERP ส่งกลับมาหลังจาก outsourcingPurchaseStockinCreate สำเร็จ
4. ข้อกำหนด Response
| ฟิลด์ | ประเภท | คำอธิบาย |
| code | int | 200=สำเร็จ, อื่นๆ=ล้มเหลว |
| msg | string | ข้อความผลลัพธ์ |
พฤติกรรมเมื่อสำเร็จ
- ใบรับสินค้าจ้างผลิตใน ERP ถูกยกเลิก/คืนค่า
- คืนค่าจำนวนสต็อก
- ยกเลิกบันทึก CheckOut ใน MES
5. กฎการตรวจสอบ
| # | รายการตรวจสอบ | กฎ | ตำแหน่งโปรแกรม |
| 1 | TL011 ต้องไม่ว่าง | ต้องมีประเภทใบ ERP | GeneralUpdater.java:1571 |
| 2 | TL012 ต้องไม่ว่าง | ต้องมีหมายเลขใบ ERP | GeneralUpdater.java:1571 |
| 3 | TRANSORDERTYPE = "59" | ตรวจสอบประเภทใบจ้างผลิต | GeneralUpdater.java:1577 |
| 4 | เอกสารต้นฉบับต้องมีอยู่ | เอกสารในระบบ ERP ต้องมีอยู่ | ตรวจสอบฝั่ง ERP |
| 5 | สถานะเอกสารอนุญาตให้ยกเลิก | ยังไม่ผ่านบัญชีถึงจะคืนค่าได้ | ตรวจสอบฝั่ง ERP |
สำคัญ: เมื่อ TL011/TL012 ว่างจะไม่เรียก ERP
ในตรรกะโปรแกรม เฉพาะเมื่อ TL011 และ TL012 ไม่ว่างเท่านั้นถึงจะเรียก outsourcingProcess
ถ้าว่าง การยกเลิก CheckOut จะดำเนินการเฉพาะฝั่ง MES ฝั่ง ERP ไม่ได้รับผลกระทบ
6. รหัสข้อผิดพลาด
| รหัส | ข้อความ | คำอธิบาย |
| E001 | ขาดฟิลด์ที่จำเป็น | outsource_no หรือ source_type ว่าง |
| E002 | ไม่พบใบรับสินค้าจ้างผลิต | ไม่พบเอกสารที่ตรงกับ outsource_no |
| E003 | เอกสารผ่านบัญชีแล้วยกเลิกไม่ได้ | เอกสาร ERP ผ่านบัญชีแล้ว ไม่สามารถคืนค่าได้ |
| E004 | เอกสารถูกยกเลิกแล้ว | ยกเลิกซ้ำ |
| E005 | source_type ไม่ถูกต้อง | ค่าไม่อยู่ในช่วง 0/1/2 |
| E999 | ข้อผิดพลาดระบบ | Timeout, ข้อผิดพลาดการเชื่อมต่อ |
7. ตัวอย่าง JSON
Request (MES JSON ภายใน)
{
"companyID": "COMP01",
"userId": "EMP001",
"outsource_no": "5902-20260319001",
"source_type": "0"
}
รูปแบบ ERP XML (ส่งจริง)
<parameters>
<parameter key="enterprise_no" type="string">COMP01</parameter>
<parameter key="site_no" type="string">COMP01</parameter>
<parameter key="source_no" type="string">5902-20260319001</parameter>
<parameter key="source_type" type="numeric">0</parameter>
<parameter key="objective_doc_no" type="string">5902-20260319001</parameter>
<parameter key="outsourcing_info_data" type="data">
<data name="outsourcing_info">
<row seq="1">
<field name="source_no" type="string"></field>
<field name="plot_no" type="string"></field>
<field name="purchase_seq" type="numeric"></field>
</row>
</data>
</parameter>
</parameters>
Response (สำเร็จ)
{
"code": 200,
"msg": "คืนค่าใบรับสินค้าจ้างผลิตสำเร็จ"
}
Response (ล้มเหลว)
{
"code": 500,
"msg": "เอกสารผ่านบัญชีแล้วยกเลิกไม่ได้ 5902-20260319001"
}
8. คำอธิบายความเสี่ยง Race Condition
ปัญหาที่ทราบ: TL011/TL012 ว่างเมื่อยกเลิก CheckOut
เมื่อผู้ใช้ยกเลิก CheckOut ก่อนที่ ERP จะส่งกลับ เนื่องจาก TL011/TL012 ยังไม่ได้เขียน outsourcingProcess จะไม่ถูกเรียก
สิ่งนี้จะทำให้ข้อมูล MES และ ERP ไม่สอดคล้องกัน
ตัวอย่างไทม์ไลน์
สาเหตุของปัญหา
if(!SftTransorderLine.getTl011().equals("") && !SftTransorderLine.getTl012().equals("")){
}
ข้อเสนอแนะการจัดการ
| แนวทาง | คำอธิบาย | ผลกระทบ |
| จัดการทันที | ไปที่ ERP ยกเลิกใบรับสินค้าจ้างผลิตนั้นด้วยตนเอง | ต้องมีคนแทรกแซง |
| กลไกรอ | เมื่อยกเลิก CheckOut ให้รอจนกว่า ERP จะส่งกลับ | ต้องแก้ไขโปรแกรม |
| กลไกล็อก | ห้ามยกเลิกขณะ CheckOut กำลังดำเนินการ | ต้องแก้ไขโปรแกรม |
| เปรียบเทียบเป็นระยะ | กำหนดการเปรียบเทียบสถานะเอกสาร MES และ ERP | ต้องเพิ่มฟังก์ชันใหม่ |