From 269e5f9bd414b167905413540bcb300e136c3a13 Mon Sep 17 00:00:00 2001 From: Chase Tucker Date: Tue, 8 Jul 2025 17:33:20 -0700 Subject: [PATCH] cache TW Lot JSON unless changed --- LSL2/STPROC/SCAN_SERVICES.txt | 130 +++++++++++++++++++------------ LSL2/STPROCINS/SCANS_EQUATES.txt | 3 + 2 files changed, 82 insertions(+), 51 deletions(-) diff --git a/LSL2/STPROC/SCAN_SERVICES.txt b/LSL2/STPROC/SCAN_SERVICES.txt index 4d30ae9..1b79b28 100644 --- a/LSL2/STPROC/SCAN_SERVICES.txt +++ b/LSL2/STPROC/SCAN_SERVICES.txt @@ -301,6 +301,7 @@ Service ProcessScanData(ScanID, ScanJSON) Locate LotId in TWLots using @VM setting twPos then Error_Services('Add', LotID : ' has already been added as a test wafer lot being used.') end else + ScansRow = True$ LotCurrentOperation = Lot_Services('GetLotCurrOperationName', LotId) If LotCurrentOperation NE 'TW_CREATE' AND LotCurrentOperation NE 'TW_CLOSE' then LotCurrWfrQty = Database_Services('ReadDataColumn', 'LOT', LotId, LOT_WAFER_QTY$, True$, 0, False$) @@ -573,6 +574,7 @@ Service ProcessScanData(ScanID, ScanJSON) Locate TWLot in ThisScanTWLots using @VM setting twPOS then ScansRow = TWLotQuantity + ScansRow = True$ end Case ScanData[1, 17] EQ 'TESTRUNTYPEUPDATE' @@ -684,9 +686,10 @@ Service ProcessScanData(ScanID, ScanJSON) // "RDS" process. If (CassetteIDs NE '') then TestWaferLotData = ScansRow + TestWaferLotChanged = ScansRow Abort = False$ TestWaferLotIsValid = False$ - If TestWaferLotData NE '' then + If TestWaferLotData NE '' and TestWaferLotChanged NE False$ then ThisTestRunType = ScansRow If ThisTestRunType NE '' then for each TWLot in TestWaferLotData using @VM setting twPOS @@ -1218,47 +1221,50 @@ Service ProcessScanData(ScanID, ScanJSON) end else If ScansRow NE '' then + TestWaferLotChanged = ScansRow ThisTestRunType = ScansRow ThisUser = ScansRow - If ThisTestRunType NE '' then - If RowExists('LSL_USERS', ThisUser) then - TestWaferLotData = ScansRow - Abort = False$ - for each TWLot in TestWaferLotData using @VM setting twPOS - If ScansRow NE '' OR ScansRow GT 0 then - TWLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_WAFER_QTY$, True$, 0, False$) - ThisCurrUsageQty = ScansRow - If TWLotCurrQty GT 0 then - If TWLotCurrQty GE ThisCurrUsageQty then - TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot) - If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then - TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$) - If Not(TWLotCurrOpen) then - - Abort = True$ - Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.') + If TestWaferLotChanged NE False$ then + If ThisTestRunType NE '' then + If RowExists('LSL_USERS', ThisUser) then + TestWaferLotData = ScansRow + Abort = False$ + for each TWLot in TestWaferLotData using @VM setting twPOS + If ScansRow NE '' OR ScansRow GT 0 then + TWLotCurrQty = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_WAFER_QTY$, True$, 0, False$) + ThisCurrUsageQty = ScansRow + If TWLotCurrQty GT 0 then + If TWLotCurrQty GE ThisCurrUsageQty then + TWLotCurrOperation = Lot_Services('GetLotCurrOperationName', TWLot) + If TWLotCurrOperation NE 'TW_CREATE' AND TWLotCurrOperation NE 'TW_CLOSE' then + TWLotCurrOpen = Database_Services('ReadDataColumn', 'LOT', TWLot, LOT_OPEN$, True$, 0, False$) + If Not(TWLotCurrOpen) then + + Abort = True$ + Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.') + end + end else + Abort = True$ + Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.') end end else - Abort = True$ - Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is currently at ':TWLotCurrOperation:' and cannot be used at this time.') + Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' does not have enough wafers. Please select ' : TWLotCurrQty : ' wafers or less.') end end else - Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' does not have enough wafers. Please select ' : TWLotCurrQty : ' wafers or less.') - end + Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' has no wafers and cannot be logged for usage.') + end end else - Scan_Services('AddNotAcceptableReason', 'Test wafer Lot ':TWLot:' has no wafers and cannot be logged for usage.') - end - end else - Abort = True$ - Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.') - end - Until Abort - Next TWLot + Abort = True$ + Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' must have a quantity associated with it.') + end + Until Abort + Next TWLot + end else + Scan_Services('AddNotAcceptableReason', 'A User ID Scan is required to log test wafer usage.') + end end else - Scan_Services('AddNotAcceptableReason', 'A User ID Scan is required to log test wafer usage.') + Scan_Services('AddNotAcceptableReason', 'A test run type is required to log test wafer usage.') end - end else - Scan_Services('AddNotAcceptableReason', 'A test run type is required to log test wafer usage.') end end else Scan_Services('AddNotAcceptableReason', 'A cassette must be scanned in order to complete a tool scan.') @@ -1689,6 +1695,8 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL) jsonScan = '' + mvScanChanged = False$ + If ScanID NE '' then If mvScan EQ '' then mvScan = Database_Services('ReadDataRow', 'SCANS', ScanID) @@ -1724,17 +1732,39 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL) // TestWafer Lot Object. If SRP_JSON(hTWLotArray, 'New', 'Array') then Abort = False$ + TestWaferLotsChanged = {TW_LOT_CHANGED} + TW_Lot_Json = {TW_LOT_JSON} + ParsingResult = '' TestWaferLots = {TW_LOT_ID} - for each TestWaferLotId in TestWaferLots using @VM setting twPos - thisTWLotJson = '' - If SRP_JSON(thisTWLotJson, 'New', 'Object') then - SRP_JSON(thisTWLotJson, 'SetValue', 'testWaferLotId', {TW_LOT_ID}<1, twPos>) - SRP_JSON(thisTWLotJson, 'SetValue', 'quantity', {TW_LOT_QTY}<1, twPos>, 'Integer') - SRP_JSON(hTWLotArray, 'Add', thisTWLotJson) - SRP_JSON(thisTWLotJson, 'Release') - end - Next TestWaferLotId - SRP_JSON(objJSONScan, 'Set', 'testWaferLots', hTWLotArray) + If TestWaferLots NE '' then + If TestWaferLotsChanged NE True$ and TW_Lot_Json NE '' then + If TW_Lot_Json NE '' then + ParsingResult = SRP_JSON(TWLotJSON, 'Parse', TW_Lot_JSON) + If ParsingResult EQ '' then + SRP_JSON(objJSONScan, 'Set', 'testWaferLots', TWLotJSON) + end + end + end + + If TW_Lot_Json EQ '' or TestWaferLotsChanged EQ True$ or ParsingResult NE '' then + for each TestWaferLotId in TestWaferLots using @VM setting twPos + thisTWLotJson = '' + If SRP_JSON(thisTWLotJson, 'New', 'Object') then + SRP_JSON(thisTWLotJson, 'SetValue', 'testWaferLotId', {TW_LOT_ID}<1, twPos>) + SRP_JSON(thisTWLotJson, 'SetValue', 'quantity', {TW_LOT_QTY}<1, twPos>, 'Integer') + SRP_JSON(hTWLotArray, 'Add', thisTWLotJson) + SRP_JSON(thisTWLotJson, 'Release') + end + Next TestWaferLotId + + TW_Lot_Json = SRP_JSON(hTWLotArray, 'Stringify', 'Fast') + mvScan = TW_Lot_Json + mvScan = False$ + mvScanChanged = True$ + + SRP_JSON(objJSONScan, 'Set', 'testWaferLots', hTWLotArray) + end + end SRP_JSON(hTWLotArray, 'Release') end SRP_JSON(objScan, 'SetValue', 'testRunTypeId', {TEST_RUN_TYPE_ID}, 'Integer') @@ -1758,14 +1788,6 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL) end SRP_JSON(hTestRunTypeArray, 'Release') end - // Created object. - objCreated = '' - If SRP_JSON(objCreated, 'New', 'Object') then - SRP_JSON(objCreated, 'SetValue', 'date', Oconv({CREATED_DATE}, 'D4/'), 'String') - SRP_JSON(objCreated, 'SetValue', 'time', Oconv({CREATED_TIME}, 'MTH'), 'String') - SRP_JSON(objJSONScan, 'Set', 'created', objCreated) - SRP_JSON(objCreated, 'Release') - end // Employee object objEmployee = '' If SRP_JSON(objEmployee, 'New', 'Object') then @@ -2072,6 +2094,10 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL) jsonScan = SRP_JSON(objJSONScan, 'Stringify', 'Fast') SRP_JSON(objJSONScan, 'Release') + + If mvScanChanged EQ True$ then + Database_Services('WriteDataRow', 'SCANS', {SCAN_ID}, mvScan, True$, False$, False$) + end end else Error_Services('Add', 'Unable to create JSON representation in the ' : Service : ' service.') end @@ -2322,3 +2348,5 @@ return + + diff --git a/LSL2/STPROCINS/SCANS_EQUATES.txt b/LSL2/STPROCINS/SCANS_EQUATES.txt index 8d9cc47..4427476 100644 --- a/LSL2/STPROCINS/SCANS_EQUATES.txt +++ b/LSL2/STPROCINS/SCANS_EQUATES.txt @@ -41,8 +41,11 @@ compile insert SCANS_EQUATES equ SCANS.TEST_RUN_TYPE_ID$ to 32 equ SCANS.TEST_RUN_TYPE_NAME$ to 33 equ SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$ to 34 + equ SCANS.TW_LOT_CHANGED$ to 35 + equ SCANS.TW_LOT_JSON$ to 36 #endif +