Response (Failure - Already released cannot delete)
{
"code": "500",
"msg": "JS_0126_00062"
}
Response (Failure - On hold cannot close)
{
"code": "500",
"msg": "JS_0115_00014"
}
Response (Failure - Not closed cannot reopen)
{
"code": "500",
"msg": "JS_0126_00059"
}
8. Database Update SQL
8.1 status=1 Delete Order
-- Check if already released (cannot delete if released)SELECT COUNT(*) FROM SFT_WS_RUN WITH (NOLOCK)
WHERE ID = N'{wo_no}'
AND EXECUTETYPE = 'release'AND PLUSINDEX = '0'-- If COUNT > 0, throw JS_0126_00062-- Check for split batch recordsSELECT COUNT(*) FROM SFT_BATCH_REC WHERE BR001 = N'{wo_no}'
-- If COUNT > 0, throw remind_004-- Delete related data (execute in order)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 Close
-- Check if order is on hold
jsonQueryFactory.sqlQuery_checkMoidIsHold(dataObject)
-- If on hold, throw JS_0115_00014-- Check for incomplete operations
jsonQueryFactory.checkHaveUndoneOp(dataObject)
-- If has incomplete ops, throw JS_0115_00017-- Execute close flow (handled by JsonQueryFactory)-- Update MODETAIL.STATUS = 99UPDATE MODETAIL SET
STATUS = 99,
LASTMAINTAINUSER = :userid,
LASTMAINTAINDATETIME = N'{current_time}'
WHERE CMOID = :CMOID
8.3 status=3 Reopen
-- Check if order is closedSELECT COUNT(*) FROM MODETAIL WITH (NOLOCK)
WHERE CMOID = N'{wo_no}'
AND STATUS NOT IN ('99', '100')
-- If COUNT > 0, not closed, throw JS_0126_00059-- Restore closed status (reverse close flow)-- Determine restore status based on SFT_WS_RUN check-in recordsUPDATE MODETAIL SET
STATUS = CASEWHEN (SELECT COUNT(1) FROM SFT_WS_RUN WITH (NOLOCK)
WHERE ID = N'{wo_no}' AND EXECUTETYPE = 'checkIn') > 0
THEN2-- Has check-in record → In ProgressELSE1-- No check-in record → Not StartedEND,
LASTMAINTAINUSER = :userid,
LASTMAINTAINDATETIME = N'{current_time}'
WHERE CMOID = :CMOID
Related Tables Deleted
Table
Description
SFT_OP_REALRUN
Process execution records
LOT
Lot records
MODETAIL
Work order master
SFT_SPEC_MODIREC
Special modification records
SFT_BATCH_REC
Split batch records
EQUIPMENT_RUN
Equipment run records
SFT_WS_RUN
Workstation run records
SFT_SPLITOUT_REC
Split out records
SFT_ASSEMBLY_REC
Assembly records
SFT_HOLD_REC
Hold records
SFT_MO_MODI
Supplementary release qty records
Code Location
API Entry: ESBapi.java:1400-1493
Status Validation: WoStatusProcess.java:66-108