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

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

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

รายการคำอธิบาย
ชื่อ API ภาษาไทยยกเลิกใบรับสินค้าจ้างผลิต (คืนค่าการรับสินค้าจ้างผลิต)
รหัส CROSS APIoutsourcing.process
ชื่องาน MESoutsourcingProcess
เส้นทาง ESB/outsourcingProcess
อ้างอิง DSMSapi-2058
ทิศทางการเรียกMES → ERP
เงื่อนไขทริกเกอร์TRANSORDERTYPE = "59" + TL011/TL012 ไม่ว่าง
รูปแบบ RequestJSON (Content-Type: application/json)
วิธีการส่งHTTP POST ผ่าน ESB
ซิงโครนัส/อะซิงโครนัสเรียกแบบซิงโครนัส

ตารางอ้างอิงพารามิเตอร์ source_type

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

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

ยกเลิก CheckOut ตรวจสอบ TL011/TL012 มีค่าหรือไม่ ตรวจสอบ TRANSORDERTYPE = "59" outsourcingProcess เรียก ERP คืนค่าการรับเข้า เสร็จสิ้น อื่นๆ: cancelStockIn != "59" ตำแหน่งโปรแกรม: GeneralUpdater.java:1571-1605
การเชื่อมโยงโค้ด
  • การตัดสินใจยกเลิก: 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_nostringYรหัสบริษัทCOMPANYID (sftcompany)
site_nostringYไซต์COMPANYID (sftcompany)
source_nostringYหมายเลขต้นทาง (หมายเลขใบรับสินค้าจ้างผลิต)outsource_no (TL011 + "-" + TL012)
source_typestringYประเภทการคืนค่า (0/1/2)"0" (คืนค่าการจัดส่ง)
objective_doc_nostringYหมายเลขเอกสารเป้าหมาย (เหมือน source_no)outsource_no

โครงสร้าง outsourcing_info_data

ฟิลด์ประเภทจำเป็นคำอธิบายแหล่ง MES
source_nostringNหมายเลขต้นทางสตริงว่าง
plot_nostringNหมายเลขล็อตสตริงว่าง
purchase_seqnumericNลำดับการจัดซื้อสตริงว่าง

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

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

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

4. ข้อกำหนด Response

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

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

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

#รายการตรวจสอบกฎตำแหน่งโปรแกรม
1TL011 ต้องไม่ว่างต้องมีประเภทใบ ERPGeneralUpdater.java:1571
2TL012 ต้องไม่ว่างต้องมีหมายเลขใบ ERPGeneralUpdater.java:1571
3TRANSORDERTYPE = "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เอกสารถูกยกเลิกแล้วยกเลิกซ้ำ
E005source_type ไม่ถูกต้องค่าไม่อยู่ในช่วง 0/1/2
E999ข้อผิดพลาดระบบTimeout, ข้อผิดพลาดการเชื่อมต่อ

7. ตัวอย่าง JSON

Request (MES JSON ภายใน)

{
  "companyID": "COMP01",
  "userId": "EMP001",
  "outsource_no": "5902-20260319001",
  "source_type": "0"
}

รูปแบบ ERP XML (ส่งจริง)

<!-- SendFormS.java:1727-1752 -->
<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 ไม่สอดคล้องกัน

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

16:29:46 MES CheckOut ส่ง ERP 16:31:08 ยกเลิก CheckOut TL011/TL012 ว่าง! 16:31:49 ERP ส่งกลับ 5902-20260310069 เอกสาร ERP ไม่ถูกยกเลิก

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

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

ข้อเสนอแนะการจัดการ

แนวทางคำอธิบายผลกระทบ
จัดการทันทีไปที่ ERP ยกเลิกใบรับสินค้าจ้างผลิตนั้นด้วยตนเองต้องมีคนแทรกแซง
กลไกรอเมื่อยกเลิก CheckOut ให้รอจนกว่า ERP จะส่งกลับต้องแก้ไขโปรแกรม
กลไกล็อกห้ามยกเลิกขณะ CheckOut กำลังดำเนินการต้องแก้ไขโปรแกรม
เปรียบเทียบเป็นระยะกำหนดการเปรียบเทียบสถานะเอกสาร MES และ ERPต้องเพิ่มฟังก์ชันใหม่