← กลับไปรายการ API

ยกเลิกใบรายงานผลผลิต (คืนค่าใบรายงานผลผลิต)

CANCEL MES → ERP
wo.work.report.data.process

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

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

ชื่อ API
wo.work.report.data.process
ชื่องานภายใน
cancelProductionForm
รูปแบบการส่งข้อมูล
JSON (Content-Type: application/json)
หมายเลขเคส
0190760
หมายเลข API
api-2196
ทิศทางข้อมูล
MES → ERP

เวลาที่ทริกเกอร์

ยกเลิกออกจากสถานี CancelCheckOut การดำเนินการของผู้ใช้ ค้นหาเลขที่ใบรายงาน PRODUCTION_REPORTID SFT_OP_REALRUN เลขที่ใบรายงาน มีอยู่? มี ส่ง ERP ยกเลิก cancelProductionForm wo.work.report.data.process ไม่มี → ข้าม
คำเตือนสำคัญ
การยกเลิกใบรายงานผลผลิตจะเรียก ERP เฉพาะเมื่อ PRODUCTION_REPORTID มีค่าเท่านั้น หากเมื่อออกจากสถานี ERP ยังไม่ได้ส่งเลขที่ใบรายงานกลับมา (TIMEOUT หรือล้มเหลว) การยกเลิกจะไม่สามารถแจ้ง ERP ให้คืนค่าได้

สถานการณ์ที่ทริกเกอร์

สถานการณ์ 1: ยกเลิกออกจากสถานีปกติ

ผู้ใช้คลิก "ยกเลิกออกจากสถานี" ใน MES ระบบจะค้นหาเลขที่ใบรายงานแล้วเรียก ERP เพื่อยกเลิกใบรายงานนั้น

สถานการณ์ 2: ยกเลิกออกจากสถานีแบบกลุ่ม

เมื่อยกเลิกหลายรายการออกจากสถานีพร้อมกัน ระบบจะเรียก ERP เพื่อยกเลิกใบรายงานที่เกี่ยวข้องทีละรายการ

สถานการณ์ 3: ยกเลิกการทำซ้ำ

เมื่อยกเลิกออกจากสถานีที่สถานีทำซ้ำ จะทริกเกอร์กระบวนการยกเลิกใบรายงานเช่นกัน

พารามิเตอร์คำขอ

ฟิลด์ ชื่อฟิลด์ ERP ประเภท จำเป็น คำอธิบาย
รหัสบริษัท enterprise_no String จำเป็น รหัสองค์กร
รหัสโรงงาน site_no String จำเป็น รหัสโรงงาน/สาขา
เลขที่ใบรายงาน report_no String จำเป็น เลขที่ใบรายงานที่ต้องการยกเลิก (ประเภท-เลขที่)
รูปแบบเลขที่ใบรายงาน
รูปแบบเลขที่ใบรายงานคือ PDTYPE-PDNO เช่น: 10-20260319001 ค่านี้มาจาก SFT_OP_REALRUN.PRODUCTION_REPORTID หรือ SFT_WS_RUN.WR024

ตัวอย่างคำขอ

รูปแบบ JSON

{
  "enterprise_no": "COMP01",
  "site_no": "SITE01",
  "report_no": "10-20260319001"
}

รูปแบบ ERP XML (WFERP)

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

รูปแบบการตอบกลับ

การตอบกลับสำเร็จ (code=200)

{
  "code": 200,
  "msg": "ยกเลิกใบรายงานสำเร็จ",
  "ERPMessage": {
    "description": "ดำเนินการสำเร็จ",
    "report_no": "10-20260319001"
  }
}

การตอบกลับล้มเหลว (code=500)

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

คำอธิบายฟิลด์การตอบกลับ

ฟิลด์ ประเภท คำอธิบาย
code Integer 200=สำเร็จ, 500=ล้มเหลว
msg String ข้อความการดำเนินการ
ERPMessage.description String ข้อความรายละเอียดที่ ERP ส่งกลับมา

ตรรกะการล้างข้อมูล MES

หลังจากยกเลิกใบรายงานสำเร็จ MES จะล้างเลขที่ใบรายงานในบันทึกที่เกี่ยวข้อง:

ERP ยกเลิกสำเร็จ code=200 ล้างเลขที่ใบรายงาน SFT_OP_REALRUN PRODUCTION_REPORTID = '' SFT_WS_RUN WR024 = '', WR025 = '' ล้างรายละเอียดใบรายงาน SFT_SFCTD SFT_SFCTE

ตรรกะ SQL การล้างข้อมูล

-- ล้างเลขที่ใบรายงานใน SFT_OP_REALRUN
UPDATE SFT_OP_REALRUN
SET PRODUCTION_REPORTID = '',
    PRODUCTION_REPORTSN = ''
WHERE ID = :KEYID
  AND ERP_OPSEQ = :ERP_OPSEQ
  AND SEQUENCE = :SEQUENCE

-- ล้างเลขที่ใบรายงานใน SFT_WS_RUN
UPDATE SFT_WS_RUN
SET WR024 = '',
    WR025 = ''
WHERE (เงื่อนไขบันทึกเข้า-ออกสถานีที่เกี่ยวข้อง)

-- ลบส่วนหัวและรายละเอียดใบรายงาน (ขึ้นอยู่กับการตั้งค่าระบบ)
DELETE FROM SFT_SFCTE WHERE TE001 = :PDTYPE AND TE002 = :PDNO
DELETE FROM SFT_SFCTD WHERE TD001 = :PDTYPE AND TD002 = :PDNO

ความแตกต่างกับ API ยกเลิกอื่นๆ

ชื่อ API ชื่องาน สถานการณ์ที่ใช้ ประเภทเอกสารที่ยกเลิก
wo.work.report.data.process cancelProductionForm ยกเลิกการรายงานผลผลิตทั่วไป ใบรายงานผลผลิต
outsourcing.process outsourcingProcess ยกเลิกรับเข้าจากผู้รับจ้างช่วง (TRANSORDERTYPE=59) ใบรับสินค้าจากผู้รับจ้างช่วง
stockin.data.process cancelStockIn ยกเลิกใบรับเข้าคลัง ใบรับเข้าคลัง
wo.scrap.data.process woScrapDataProcess ยกเลิกรับเข้าของเสีย (TRANSORDERTYPE=58) ใบของเสีย
ตรรกะการตัดสิน
เมื่อยกเลิกออกจากสถานี ระบบจะตัดสินว่าจะเรียก API ยกเลิกใดตาม SFT_TRANSORDER_LINE.TRANSORDERTYPE:

• TRANSORDERTYPE = 59 → outsourcingProcess (ผู้รับจ้างช่วง)
• TRANSORDERTYPE = 58 → woScrapDataProcess (ของเสีย)
• อื่นๆ → cancelStockIn หรือ cancelProductionForm

ตารางข้อมูลที่เกี่ยวข้อง

ตารางข้อมูล คำอธิบาย ฟิลด์ที่ได้รับผลกระทบ
SFT_OP_REALRUN บันทึกการดำเนินงานกระบวนการผลิต PRODUCTION_REPORTID, PRODUCTION_REPORTSN (ล้าง)
SFT_WS_RUN บันทึกการดำเนินงานสถานีงาน WR024, WR025 (ล้าง)
SFT_SFCTD ส่วนหัวใบรายงาน ลบทั้งแถวหรือทำเครื่องหมายยกเลิก
SFT_SFCTE รายละเอียดใบรายงาน ลบทั้งแถวหรือทำเครื่องหมายยกเลิก

ตำแหน่งโค้ด

ฟังก์ชัน พาธไฟล์ บรรทัด
จุดเริ่มต้นยกเลิกออกจากสถานี SFT_core/src/com/dci/sft/update/GeneralUpdater.java 1571-1605
การเรียก API ยกเลิก SFT_ERPIntegrate/src/com/dci/sft/erp/XmlToERP_handler.java 159-237
ล้างเลขที่ใบรายงาน SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java 1530-1580

การจัดการข้อผิดพลาด

สถานการณ์ข้อผิดพลาด การตอบกลับ ERP วิธีการจัดการ MES
ใบรายงานได้รับการยืนยันแล้ว code=500, ใบรายงานได้รับการยืนยันแล้ว แสดงข้อความข้อผิดพลาด ต้องจัดการด้วยตนเอง
ใบรายงานไม่มีอยู่ code=500, ใบรายงานไม่มีอยู่ ล้างเลขที่ใบรายงาน MES ดำเนินการยกเลิกต่อไป
การเชื่อมต่อหมดเวลา SocketTimeoutException บันทึก LOG ต้องยกเลิกเพิ่มเติมด้วยตนเอง

บันทึก LOG

// ไฟล์บันทึก: logs/ERPReturnErrorRec.log

[ERP_SEND_ERROR] taskName=cancelProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] เนื้อหาที่ส่ง={"report_no":"10-20260319001"}

ความเสี่ยง Race Condition

ข้อควรระวังสำคัญ
เช่นเดียวกับ API สร้างใบรายงาน การยกเลิกใบรายงานก็มีความเสี่ยง Race Condition:

สถานการณ์: ยกเลิกทันทีหลังออกจากสถานี แต่ ERP ยังไม่ได้ส่งเลขที่ใบรายงานกลับมา
ผลลัพธ์: PRODUCTION_REPORTID ว่างเปล่า ไม่สามารถเรียก ERP ยกเลิกได้
ผลกระทบ: MES ยกเลิกออกจากสถานีแล้ว แต่ใบรายงาน ERP ยังคงอยู่

วิธีการจัดการที่แนะนำ:
  1. รอ ERP ส่งกลับสำเร็จหลังออกจากสถานี ก่อนอนุญาตให้ยกเลิก
  2. เปรียบเทียบสถานะใบรายงาน MES และ ERP เป็นประจำ
  3. จัดเตรียมฟังก์ชันยกเลิกเพิ่มเติมด้วยตนเอง