คืนค่าการรับเข้าคลังสินค้าสำเร็จรูป (ยกเลิก)

stockin.data.process
ยกเลิก JSON ซิงโครนัส

1. ข้อมูลพื้นฐาน

รายการคำอธิบาย
ชื่อ API ภาษาไทยคืนค่าการรับเข้าคลังสินค้าสำเร็จรูป (ยกเลิกการรับเข้าคลัง)
ชื่อ API ภาษาอังกฤษWork Order Stock-In Data Process (Cancel)
รหัส CROSS APIstockin.data.process
บริการ ESB ที่เกี่ยวข้อง/cancelStockIn (ทั่วไป) หรือ /outsourcingProcess (TRANSORDERTYPE=59)
ทิศทางการเรียกMES → ERP
เวลาที่เรียก1. เมื่อ MES ยกเลิกการออกจากสถานี
2. เมื่อมีปัญหาคุณภาพต้องส่งกลับไปทำใหม่
เงื่อนไขทริกเกอร์TL011/TL012 ไม่ว่าง
สถานการณ์ทางธุรกิจหลักยกเลิกการรับเข้าคลังที่เสร็จสิ้นแล้ว ERP ต้องคืนค่าการหักสต็อกและยกเลิกเอกสารรับเข้าคลังเดิม
รูปแบบ RequestJSON (Content-Type: application/json)
ซิงโครนัส/อะซิงโครนัสเรียกแบบซิงโครนัส
การควบคุมธุรกรรมต้องการ
หมายเหตุก่อนยกเลิกต้องตรวจสอบว่า TL011/TL012 มีค่าหรือไม่ ถ้ามีค่าถึงจะเรียก ERP

การตัดสินประเภทการยกเลิก

TRANSORDERTYPEบริการ ESBคำอธิบาย
59outsourcingProcessยกเลิกใบรับสินค้าจ้างผลิต
อื่นๆcancelStockInยกเลิกใบรับเข้าคลังทั่วไป

พารามิเตอร์ source_type (สำหรับจ้างผลิตเท่านั้น)

source_typeคำอธิบายสถานการณ์ใช้งาน
0คืนค่าการส่งออกยกเลิกการออกจากสถานี (ส่งออกจ้างผลิต)
1คืนค่าการรับกลับยกเลิกการเข้าสถานี (รับกลับจ้างผลิต)
2คืนค่าการคืนสินค้ายกเลิกการคืนสินค้า

2. กระบวนการทางธุรกิจ

ยกเลิกออกจากสถานี ตรวจสอบ TL011/TL012 มีค่าหรือไม่ ตัดสิน TRANSORDERTYPE = 59: outsourcingProcess อื่นๆ: cancelStockIn เรียก ERP คืนค่าสต็อก เสร็จสิ้น TL011/TL012 ว่าง ข้ามการเรียก ERP ตำแหน่งโปรแกรม: GeneralUpdater.java:1571-1605
ตำแหน่งโค้ด
  • การตัดสินยกเลิก: GeneralUpdater.java:1571-1605
  • ตรวจสอบ TL011/TL012: GeneralUpdater.java:1571
  • ตัดสิน TRANSORDERTYPE: GeneralUpdater.java:1577
API ที่เกี่ยวข้อง
การยกเลิกใบรับเข้าคลังใช้คู่กับการสร้างใบรับเข้าคลัง (stockin.data.create)
เมื่อยกเลิกต้องใช้ TB001/TB002 ที่ ERP ส่งกลับมาหลังจากสร้างสำเร็จ (เก็บใน TL011/TL012)

3. ข้อกำหนด Request

รูปแบบการส่ง: JSON
Content-Type: application/json

3.1 ยกเลิกใบรับเข้าคลังทั่วไป (cancelStockIn)

ฟิลด์ประเภทจำเป็นคำอธิบายแหล่งข้อมูล MES
companyIDstringYรหัสบริษัทCOMPANYID
userIdstringYผู้ดำเนินการผู้ล็อกอินปัจจุบัน
stock_in_nostringYเลขที่ใบรับเข้าคลัง (ประเภท-เลขที่)TL011 + "-" + TL012

3.2 ยกเลิกใบรับสินค้าจ้างผลิต (outsourcingProcess)

ฟิลด์ประเภทจำเป็นคำอธิบายแหล่งข้อมูล MES
companyIDstringYรหัสบริษัทCOMPANYID
userIdstringYผู้ดำเนินการผู้ล็อกอินปัจจุบัน
outsource_nostringYเลขที่ใบจ้างผลิต (ประเภท-เลขที่)TL011 + "-" + TL012
source_typestringYประเภทการคืนค่า (0/1/2)"0" (คืนค่าการส่งออก)

คำอธิบายแหล่งที่มาของฟิลด์

stock_in_no / outsource_no = SFT_TRANSORDER_LINE.TL011 + "-" + SFT_TRANSORDER_LINE.TL012

TL011/TL012 ถูกเขียนจาก TB001/TB002 ที่ ERP ส่งกลับมาหลังจาก stockin.data.create สำเร็จ

4. ข้อกำหนด Response

ฟิลด์ประเภทคำอธิบาย
codeint200=สำเร็จ, อื่นๆ=ล้มเหลว
msgstringข้อความผลการประมวลผล

พฤติกรรมเมื่อสำเร็จ

5. กฎการตรวจสอบ

#รายการตรวจสอบกฎตำแหน่งโปรแกรม
1TL011 ไม่ว่างต้องมีประเภทเอกสาร ERPGeneralUpdater.java:1571
2TL012 ไม่ว่างต้องมีเลขที่เอกสาร ERPGeneralUpdater.java:1571
3การเชื่อมต่อ ERPSFTConfig.isHasERP() = trueGeneralUpdater.java:1575
4ตัดสิน TRANSORDERTYPE59=outsourcingProcess, อื่นๆ=cancelStockInGeneralUpdater.java:1582
5เอกสารต้นฉบับมีอยู่เอกสารฝั่ง ERP ต้องมีอยู่ตรวจสอบฝั่ง ERP
6สถานะเอกสารอนุญาตให้ยกเลิกยังไม่ผ่านรายการถึงจะคืนค่าได้ตรวจสอบฝั่ง ERP
สำคัญ: เมื่อ TL011/TL012 ว่างจะไม่เรียก ERP
ในลอจิกโปรแกรม จะเรียก API ยกเลิกก็ต่อเมื่อ TL011 และ TL012 ทั้งคู่ไม่ว่างเท่านั้น
ถ้าว่าง การยกเลิกออกจากสถานีจะดำเนินการเฉพาะฝั่ง MES ฝั่ง ERP ไม่ได้รับผลกระทบ

6. รหัสข้อผิดพลาด

รหัสข้อความคำอธิบาย
E101ไม่มีใบรับเข้าคลังไม่พบเอกสารที่ตรงกับ stock_in_no
E102ใบรับเข้าคลังผ่านรายการแล้วใบรับเข้าคลังผ่านรายการแล้ว ไม่สามารถคืนค่าได้
E103ใบรับเข้าคลังถูกอ้างอิงแล้วมีใบขายหรือใบโอนที่ตามมา
E104สต็อกไม่เพียงพอสต็อกจะติดลบหลังยกเลิก
E999ข้อผิดพลาดของระบบTimeout, การเชื่อมต่อผิดปกติ

7. ตัวอย่าง JSON

Request - ยกเลิกใบรับเข้าคลังทั่วไป

{
  "companyID": "COMP01",
  "userId": "EMP001",
  "stock_in_no": "5101-20260319001"
}

Request - ยกเลิกใบรับสินค้าจ้างผลิต

{
  "companyID": "COMP01",
  "userId": "EMP001",
  "outsource_no": "5902-20260319001",
  "source_type": "0"   // 0=คืนค่าการส่งออก
}

Response (สำเร็จ)

{
  "code": 200,
  "msg": "ยกเลิกใบรับเข้าคลังสำเร็จ"
}

Response (ล้มเหลว)

{
  "code": 500,
  "msg": "ใบรับเข้าคลังผ่านรายการแล้ว ไม่สามารถยกเลิกได้"
}

8. คำอธิบายความเสี่ยง Race Condition

ปัญหาที่ทราบ: TL011/TL012 ว่างเมื่อยกเลิกออกจากสถานี

เมื่อผู้ใช้ยกเลิกออกจากสถานีก่อนที่ ERP จะตอบกลับ เนื่องจาก TL011/TL012 ยังไม่ถูกเขียนกลับ API ยกเลิกจะไม่ถูกเรียก
สิ่งนี้จะทำให้ข้อมูล MES และ ERP ไม่สอดคล้องกัน

ตัวอย่างไทม์ไลน์

T1 MES ออกจากสถานี ส่ง ERP T2 ยกเลิกออกจากสถานี TL011/TL012 ว่าง! T3 ERP ตอบกลับ TB001/TB002 เอกสาร ERP ไม่ถูกยกเลิก

สาเหตุของปัญหา

// GeneralUpdater.java:1571
if(!SftTransorderLine.getTl011().equals("") && !SftTransorderLine.getTl012().equals("")){
    // จะเรียก API ยกเลิกก็ต่อเมื่อ TL011/TL012 ไม่ว่างเท่านั้น
    // ถ้ายกเลิกก่อน ERP ตอบกลับ if นี้จะเป็น false ข้ามการเรียก ERP
}

คำแนะนำในการจัดการ

วิธีการคำอธิบายผลกระทบ
จัดการทันทียกเลิกใบรับเข้าคลังนั้นที่ ERP ด้วยตนเองต้องมีคนดำเนินการ
กลไกรอรอ ERP ตอบกลับเสร็จก่อนอนุญาตให้ยกเลิกต้องแก้ไขโปรแกรม
กลไก Lockห้ามยกเลิกขณะออกจากสถานีกำลังดำเนินการต้องแก้ไขโปรแกรม
เปรียบเทียบเป็นระยะตารางเวลาเปรียบเทียบสถานะเอกสาร MES และ ERPต้องเพิ่มฟีเจอร์ใหม่
กรณีศึกษาอ้างอิง
ดูรายละเอียดใน CLAUDE.md บันทึกวันที่ 2026-03-12 "การวิเคราะห์ปัญหา outsourcingProcess ไม่ถูกเรียกเมื่อยกเลิกออกจากสถานี 0000675600"