เปลี่ยนสถานะใบสั่งผลิต

wo.status.process
POST JSON ซิงโครนัส ERP → MES

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

รายการคำอธิบาย
ชื่อ API ภาษาไทยเปลี่ยนสถานะใบสั่งผลิต (ลบ/ปิดงาน/ยกเลิกปิดงาน)
ชื่อ API ภาษาอังกฤษWork Order Status Process
รหัส APIwo.status.process
หมายเลขเคส0189142
REST EndpointPOST /ESB/API/upModetailStatus
ทิศทางการเรียกERP → MES
เวลาที่เรียกเมื่อ ERP ลบ ปิดงาน หรือยกเลิกปิดงานใบสั่งผลิต
สถานการณ์ทางธุรกิจหลักERP เปลี่ยนสถานะใบสั่งผลิต อัปเดตสถานะใบสั่งผลิตหรือลบข้อมูลใบสั่งผลิตใน MES พร้อมกัน
รูปแบบ RequestJSON (Content-Type: application/json)
ซิงโครนัส/อะซิงโครนัสเรียกแบบซิงโครนัส
คำอธิบายทิศทางการเรียก
API นี้เป็นการส่งทางเดียว ERP → MES
ดำเนินการที่แตกต่างกันตามพารามิเตอร์ status: ลบ(1), ปิดงาน(2), ยกเลิกปิดงาน(3)

2. ตารางสถานะ

statusการดำเนินการคำอธิบายพฤติกรรม MES
1ลบใบสั่งผลิตลบใบสั่งผลิตและแบตช์ที่เกี่ยวข้องDELETE MODETAIL / LOT
2ปิดงานกำหนดเสร็จสิ้น/ปิดงานใบสั่งผลิตตรวจสอบกระบวนการที่ยังไม่เสร็จ เปลี่ยนสถานะ
3ยกเลิกปิดงานคืนค่าใบสั่งผลิตที่ปิดงานแล้วคืนค่า STATUS (99/100 → สถานะเดิม)

คำจำกัดความ MODETAIL.STATUS

STATUSคำอธิบาย
1ยังไม่ผลิต
2กำลังผลิต
3รอปิดงาน
99ปิดงานแล้ว
100ยกเลิก

3. ข้อกำหนด Request

รูปแบบการส่ง: JSON
Content-Type: application/json
ฟิลด์ประเภทจำเป็นคำอธิบายตัวอย่าง
CompanyIdstringYรหัสบริษัท"COMP01"
langstringNภาษา"th_TH"
wo_nostringYหมายเลขใบสั่งผลิต (ประเภท-เลขที่)"5101-20260319001"
statusstringYประเภทการดำเนินการ (1/2/3)"1"

4. ข้อกำหนด Response

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

5. ลอจิกการประมวลผล

5.1 status=1 ลบใบสั่งผลิต

status=1 ลบ ปล่อยแล้ว? JS_0126_00062 ใช่ DELETE MODETAIL DELETE LOT ไม่ เสร็จสิ้น ตรวจสอบ SFT_WS_RUN.EXECUTETYPE='release'
ข้อจำกัดการลบ
ถ้าใบสั่งผลิตมีการปล่อยแล้ว (SFT_WS_RUN มีบันทึก EXECUTETYPE='release') จะไม่สามารถลบได้ จะโยนข้อผิดพลาด JS_0126_00062

5.2 status=2 ปิดงาน

status=2 ปิดงาน หยุดชั่วคราว? JS_0115_00014 ใช่ กระบวนการยังไม่เสร็จ? ไม่ JS_0115_00017 ใช่ ดำเนินการปิดงาน ไม่ ตรวจสอบ SFT_HOLD_REC (หยุดชั่วคราว) และ SFT_OP_REALRUN (ยังไม่เสร็จ)
การตรวจสอบปิดงาน
  • ตรวจสอบ SFT_HOLD_REC: ใบสั่งผลิตหยุดชั่วคราวอยู่หรือไม่
  • ตรวจสอบ SFT_OP_REALRUN: มีกระบวนการที่ยังไม่เสร็จหรือไม่

5.3 status=3 ยกเลิกปิดงาน

status=3 ยกเลิกปิดงาน STATUS ∈(99,100)? JS_0126_00059 ไม่ คืนค่าสถานะปิดงาน ใช่ ตรวจสอบ MODETAIL.STATUS เป็นสถานะปิดงาน/ยกเลิกหรือไม่
เงื่อนไขยกเลิกปิดงาน
เฉพาะใบสั่งผลิตที่มี STATUS=99 (ปิดงานแล้ว) หรือ STATUS=100 (ยกเลิก) เท่านั้นที่สามารถดำเนินการยกเลิกปิดงานได้

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

รหัสข้อความเงื่อนไขที่ทริกเกอร์status ที่เกี่ยวข้อง
JS_0126_00062ใบสั่งผลิตมีการปล่อยแล้ว ไม่สามารถลบได้SFT_WS_RUN มีบันทึกการปล่อยstatus=1
JS_0115_00014ใบสั่งผลิตหยุดชั่วคราวอยู่ กรุณายกเลิกหยุดชั่วคราวก่อนกำหนดเสร็จสิ้นSFT_HOLD_REC มีบันทึกหยุดชั่วคราวstatus=2
JS_0115_00017เอกสารนี้มีกระบวนการที่ยังไม่เสร็จ กรุณาทำให้กระบวนการเสร็จก่อนปิดงานใบสั่งผลิตSFT_OP_REALRUN มีกระบวนการที่ยังไม่เสร็จstatus=2
JS_0126_00059ใบสั่งผลิต eMES ยังไม่ปิดงาน ไม่สามารถยกเลิกได้MODETAIL.STATUS ไม่อยู่ใน (99,100)status=3
remind_002ไม่มีข้อมูลไม่มีหมายเลขใบสั่งผลิตทั้งหมด

7. ตัวอย่าง JSON

Request - ลบใบสั่งผลิต (status=1)

{
  "CompanyId": "COMP01",
  "lang": "th_TH",
  "wo_no": "5101-20260319001",
  "status": "1"  // ลบ
}

Request - ปิดงาน (status=2)

{
  "CompanyId": "COMP01",
  "lang": "th_TH",
  "wo_no": "5101-20260319001",
  "status": "2"  // ปิดงาน
}

Request - ยกเลิกปิดงาน (status=3)

{
  "CompanyId": "COMP01",
  "lang": "th_TH",
  "wo_no": "5101-20260319001",
  "status": "3"  // ยกเลิกปิดงาน
}

Response (สำเร็จ)

{
  "code": "200",
  "msg": "success"
}

Response (ล้มเหลว - มีการปล่อยแล้วไม่สามารถลบ)

{
  "code": "500",
  "msg": "JS_0126_00062"
}

Response (ล้มเหลว - หยุดชั่วคราวอยู่ไม่สามารถปิดงาน)

{
  "code": "500",
  "msg": "JS_0115_00014"
}

Response (ล้มเหลว - ยังไม่ปิดงานไม่สามารถยกเลิก)

{
  "code": "500",
  "msg": "JS_0126_00059"
}

8. SQL อัปเดตฐานข้อมูล

8.1 status=1 ลบใบสั่งผลิต

-- ตรวจสอบว่ามีการปล่อยแล้วหรือไม่ (ถ้ามีแล้วไม่สามารถลบ)
SELECT COUNT(*) FROM SFT_WS_RUN WITH (NOLOCK)
WHERE ID = N'{wo_no}'
  AND EXECUTETYPE = 'release'
  AND PLUSINDEX = '0'
-- ถ้า COUNT > 0 โยน JS_0126_00062

-- ตรวจสอบว่ามีบันทึกแยกแบตช์หรือไม่
SELECT COUNT(*) FROM SFT_BATCH_REC WHERE BR001 = N'{wo_no}'
-- ถ้า COUNT > 0 โยน remind_004

-- ลบข้อมูลที่เกี่ยวข้อง (ดำเนินการตามลำดับ)
DELETE FROM SFT_OP_REALRUN WHERE ID = :CMOID
DELETE FROM LOT WHERE MOID = :CMOID
DELETE FROM MODETAIL WHERE CMOID = :CMOID
DELETE FROM SFT_SPEC_MODIREC WHERE MD001 = :CMOID
DELETE FROM SFT_BATCH_REC WHERE BR002 = :CMOID
DELETE FROM EQUIPMENT_RUN WHERE LOTID = :CMOID
DELETE FROM SFT_WS_RUN WHERE ID = :CMOID
DELETE FROM SFT_SPLITOUT_REC WHERE SSR001 = :CMOID
DELETE FROM SFT_ASSEMBLY_REC WHERE SAR001 = :CMOID
DELETE FROM SFT_HOLD_REC WHERE HR001 = :CMOID
DELETE FROM SFT_MO_MODI WHERE MODI002 = :CMOID

8.2 status=2 ปิดงาน

-- ตรวจสอบว่าใบสั่งผลิตหยุดชั่วคราวอยู่หรือไม่
jsonQueryFactory.sqlQuery_checkMoidIsHold(dataObject)
-- ถ้าหยุดชั่วคราวอยู่ โยน JS_0115_00014

-- ตรวจสอบว่ามีกระบวนการที่ยังไม่เสร็จหรือไม่
jsonQueryFactory.checkHaveUndoneOp(dataObject)
-- ถ้ามีกระบวนการที่ยังไม่เสร็จ โยน JS_0115_00017

-- ดำเนินการปิดงาน (โดย JsonQueryFactory)
-- อัปเดต MODETAIL.STATUS = 99
UPDATE MODETAIL SET
    STATUS = 99,
    LASTMAINTAINUSER = :userid,
    LASTMAINTAINDATETIME = N'{เวลาปัจจุบัน}'
WHERE CMOID = :CMOID

8.3 status=3 ยกเลิกปิดงาน

-- ตรวจสอบว่าใบสั่งผลิตปิดงานแล้วหรือไม่
SELECT COUNT(*) FROM MODETAIL WITH (NOLOCK)
WHERE CMOID = N'{wo_no}'
  AND STATUS NOT IN ('99', '100')
-- ถ้า COUNT > 0 หมายถึงยังไม่ปิดงาน โยน JS_0126_00059

-- คืนค่าสถานะปิดงาน (ดำเนินการย้อนกลับจากกระบวนการปิดงาน)
-- ตัดสินสถานะที่จะคืนค่าตามบันทึกการเข้าสถานีใน SFT_WS_RUN
UPDATE MODETAIL SET
    STATUS = CASE
        WHEN (SELECT COUNT(1) FROM SFT_WS_RUN WITH (NOLOCK)
              WHERE ID = N'{wo_no}' AND EXECUTETYPE = 'checkIn') > 0
        THEN 2  -- มีบันทึกเข้าสถานี → กำลังผลิต
        ELSE 1  -- ไม่มีบันทึกเข้าสถานี → ยังไม่ผลิต
    END,
    LASTMAINTAINUSER = :userid,
    LASTMAINTAINDATETIME = N'{เวลาปัจจุบัน}'
WHERE CMOID = :CMOID
คำอธิบายตารางข้อมูลที่เกี่ยวข้องกับการลบ
ตารางข้อมูลคำอธิบาย
SFT_OP_REALRUNบันทึกผลการดำเนินการกระบวนการ
LOTบันทึกแบตช์
MODETAILตารางหลักใบสั่งผลิต
SFT_SPEC_MODIRECบันทึกการแก้ไขพิเศษ
SFT_BATCH_RECบันทึกการแยกแบตช์
EQUIPMENT_RUNบันทึกการทำงานเครื่องจักร
SFT_WS_RUNบันทึกการทำงานสถานี
SFT_SPLITOUT_RECบันทึกการแยกออก
SFT_ASSEMBLY_RECบันทึกการประกอบ
SFT_HOLD_RECบันทึกการหยุดชั่วคราว
SFT_MO_MODIบันทึกการปล่อยเพิ่มเติม
ตำแหน่งโปรแกรม
จุดเข้า API: ESBapi.java:1400-1493
ตรวจสอบสถานะ: WoStatusProcess.java:66-108