pre cutover push
This commit is contained in:
@ -50,17 +50,26 @@ $Insert REACT_UTIL_EQU
|
||||
$Insert SCHED_DET_NG_EQUATES
|
||||
$Insert REACT_STATUS_EQUATES
|
||||
$Insert WO_LOG_EQUATES
|
||||
$Insert REACTOR_DAILY_UPTIME_EQUATES
|
||||
$Insert REACT_LL_EQUATES
|
||||
equ WOCust$ to 2
|
||||
|
||||
//Uptime Percentage Equates
|
||||
EQU PRODUCTIVE$ to 1
|
||||
EQU UNSCHED$ to 2
|
||||
EQU SCHED$ to 3
|
||||
EQU NONSCHED$ to 4
|
||||
EQU ENG$ to 5
|
||||
|
||||
|
||||
Declare subroutine Error_Services, Reactor_Services, Memory_Services, RList, Database_Services, SRP_JSON, obj_React_Mode
|
||||
Declare subroutine Excel_Services, Schedule_Services, Logging_Services, Set_Status, obj_React_Status, Errmsg,React_Assign_Conv
|
||||
Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray
|
||||
Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray, Delay, Mona_Services, SRP_List
|
||||
Declare function SRP_Array, Reactor_Services, Memory_Services, Database_Services, SRP_Sort_Array, Excel_Services
|
||||
Declare function SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Services, Date_Services, Environment_Services
|
||||
Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime
|
||||
Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services
|
||||
Declare function SRP_Time, Rds_Services, SRP_Fastarray
|
||||
Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services
|
||||
|
||||
// Report paths for various performance report services.
|
||||
TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
|
||||
@ -89,7 +98,7 @@ Return Response else ''
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Service Parameter Options
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Options BOOLEAN = True$, False$
|
||||
Options BOOLEAN = True$, False$
|
||||
Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT'
|
||||
|
||||
|
||||
@ -1517,6 +1526,13 @@ Service GetReactorCurrLoad(ReactNo)
|
||||
Response = LoadedCassettes
|
||||
end service
|
||||
|
||||
Service GetReactorCurrLoadRDS(ReactNo)
|
||||
Response = ''
|
||||
ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo)
|
||||
LoadedCassettes = ReactStatusRec<REACT_STATUS_LOAD_RDS$>
|
||||
Response = LoadedCassettes
|
||||
end service
|
||||
|
||||
Service GetReactCurrModeRec(ReactNo)
|
||||
|
||||
Response = ''
|
||||
@ -1959,6 +1975,59 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
|
||||
end else
|
||||
ErrorMsg = 'Failed to locate ModeSubCat.'
|
||||
end
|
||||
|
||||
CurrentMode = PrevModeRec<REACT_MODE_NG_MODE$>
|
||||
ActiveProveInPreventsModeChange = Reactor_Services('ActiveProveInPreventsModeChange', ReactNo, Mode, CurrentMode)
|
||||
|
||||
If Error_Services('HasError') then
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end else
|
||||
If ActiveProveInPreventsModeChange EQ True$ then
|
||||
ErrorMsg = 'A reactor prove in is required before changing the mode. Active prove in types: '
|
||||
|
||||
TypeList = ''
|
||||
ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X')
|
||||
for each ProveInType in ProveInTypes using @VM setting Idx
|
||||
If Idx GT 1 then
|
||||
TypeList := ', '
|
||||
end
|
||||
TypeList := ProveInType
|
||||
Next ProveInType
|
||||
|
||||
ErrorMsg := TypeList
|
||||
end
|
||||
end
|
||||
|
||||
IdleStartupRequired = Xlate('REACTOR', ReactNo, REACTOR_IDLE_STARTUP_REQUIRED$, 'X')
|
||||
If ErrorMsg EQ '' and IdleStartupRequired and Mode[1, 2] EQ 'UP' then
|
||||
ProveInTypes = Xlate('REACTOR', ReactNo, REACTOR_PROVE_IN_TYPE$, 'X')
|
||||
IdleStartupActive = False$
|
||||
for each ProveInType in ProveInTypes using @VM setting Idx
|
||||
If ProveInType EQ 'IDLE' then
|
||||
IdleStartupActive = True$
|
||||
end
|
||||
Next ProveInType
|
||||
|
||||
If IdleStartupActive EQ True$ then
|
||||
ErrorMsg = "You must complete the IDLE_STARTUP prove in checklist before putting the reactor UP."
|
||||
end else
|
||||
ErrorMsg = "An IDLE_STARTUP prove in checklist is required before putting the reactor UP. Change the mode to IDLE_STARTUP, then complete the checklist."
|
||||
end
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
If Len(Mode) GT 10 and Mode[1, 10] EQ 'CHANGEOVER' then
|
||||
Reactor_Services('CreateReactorProveInOrder', ReactNo, 'CHANGEOVER')
|
||||
end
|
||||
|
||||
If Mode EQ 'INITIATE_IDLE' then
|
||||
Reactor_Services('CreateReactorProveInOrder', ReactNo, 'INITIATE_IDLE')
|
||||
end
|
||||
|
||||
If Mode EQ 'IDLE_STARTUP' then
|
||||
Reactor_Services('CreateReactorProveInOrder', ReactNo, 'IDLE')
|
||||
end
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
//Log the current Mode Change
|
||||
@ -2423,6 +2492,7 @@ Service ConvertRecordToJSON(ReactorNo, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
LoadLockDisabled = Xlate('REACT_LL', LLDisabledKey, 'DISABLED', 'X')
|
||||
SRP_JSON(objReactor, 'SetValue', 'loadLockDown', LoadLockDisabled)
|
||||
SRP_JSON(objReactor, 'SetValue', '0311Active', Xlate('REACTOR', ReactorNo, '0311_ACTIVE', 'X'), 'Boolean')
|
||||
SRP_JSON(objReactor, 'SetValue', 'active0311Checklist', Xlate('REACTOR', ReactorNo, '0311_ACTIVE', 'X'), 'Boolean')
|
||||
SRP_JSON(objReactor, 'SetValue', 'TubeBellJarCnt', Xlate('REACTOR', ReactorNo, REACTOR_TUBE_BELL_JAR_THK$, 'X'))
|
||||
SRP_JSON(objReactor, 'SetValue', 'TubeBellJarThk', Xlate('REACTOR', ReactorNo, REACTOR_TUBE_BELL_JAR_WFR_CNT$, 'X'))
|
||||
SRP_JSON(objReactor, 'SetValue', 'SusceptorCnt', Xlate('REACTOR', ReactorNo, REACTOR_SUSC_WFR_CNT$, 'X'))
|
||||
@ -2446,7 +2516,7 @@ Service ConvertRecordToJSON(ReactorNo, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
SRP_JSON(objReactor, 'SetValue', 'loadedRDS', '')
|
||||
end
|
||||
|
||||
//Add new reactor items here
|
||||
// Add new reactor items here
|
||||
InstItems = Xlate('REACTOR', ReactorNo, REACTOR_CURR_INST_ITEMS$, 'X')
|
||||
If InstItems NE '' then
|
||||
objInstItems = ''
|
||||
@ -2507,6 +2577,7 @@ Service ConvertRecordToJSON(ReactorNo, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
end
|
||||
end
|
||||
|
||||
// Reactor Mode object/properties
|
||||
If FullObject then
|
||||
// Add reactor mode object
|
||||
JSONReactorMode = React_Mode_NG_Services('ConvertRecordToJSON', CurrModeKey, '', CurrUser)
|
||||
@ -2526,6 +2597,56 @@ Service ConvertRecordToJSON(ReactorNo, ItemURL, CurrUser, FullObject=BOOLEAN)
|
||||
SRP_JSON(objReactor, 'SetValue', 'e10State', E10State)
|
||||
end
|
||||
|
||||
If Not(FullObject) then
|
||||
// Add reactor log properties
|
||||
CurrRlKey = Xlate('REACTOR', ReactorNo, 'CURR_MODE_RL_ID', 'X')
|
||||
If CurrRLKey NE '' then
|
||||
RlChecklistActive = Xlate('REACTOR_LOG', CurrRlKey, 'CHECKLIST_ACTIVE', 'X')
|
||||
SRP_JSON(objReactor, 'SetValue', 'reactorLogChecklistActive', RlChecklistActive, 'Boolean')
|
||||
If RlChecklistActive then
|
||||
RlChecklistTypes = Xlate('REACTOR_LOG', CurrRlKey, 'CHECKLIST_TYPE', 'X')
|
||||
RlChecklistOrderIds = Xlate('REACTOR_LOG', CurrRlKey, 'CHECKLIST_ORDER_ID', 'X')
|
||||
objRlChecklistArray = ''
|
||||
If SRP_JSON(objRlChecklistArray, 'New', 'Array') then
|
||||
objChecklist = ''
|
||||
For each RlChecklistType in RlChecklistTypes using @VM setting vPos
|
||||
If SRP_JSON(objChecklist, 'New', 'Object') then
|
||||
SRP_JSON(objChecklist, 'SetValue', 'reactorLogChecklistType', RlChecklistType)
|
||||
RlChecklistOrderId = RlChecklistOrderIds<0, vPos>
|
||||
SRP_JSON(objChecklist, 'SetValue', 'reactorLogChecklistOrderId', RlChecklistOrderId)
|
||||
SRP_JSON(objRlChecklistArray, 'Add', objChecklist)
|
||||
SRP_JSON(objChecklist, 'Release')
|
||||
end
|
||||
Next RlChecklistType
|
||||
SRP_JSON(objReactor, 'Set', 'reactorLogChecklists', objRlChecklistArray)
|
||||
SRP_JSON(objRlChecklistArray, 'Release')
|
||||
end
|
||||
end
|
||||
end
|
||||
// Add prove in checklist properties
|
||||
PiChecklistActive = Xlate('REACTOR', ReactorNo, 'PROVE_IN_ACTIVE', 'X')
|
||||
SRP_JSON(objReactor, 'SetValue', 'proveInChecklistActive', PiChecklistActive, 'Boolean')
|
||||
If PiChecklistActive then
|
||||
PiTypes = Xlate('REACTOR', ReactorNo, 'PROVE_IN_TYPE', 'X')
|
||||
PiChecklistOrderIds = Xlate('REACTOR', ReactorNo, 'PROVE_IN_ORDER_ID', 'X')
|
||||
objPiChecklistArray = ''
|
||||
If SRP_JSON(objPiChecklistArray, 'New', 'Array') then
|
||||
objProveIn = ''
|
||||
For each PiType in PiTypes using @VM setting vPos
|
||||
If SRP_JSON(objProveIn, 'New', 'Object') then
|
||||
SRP_JSON(objProveIn, 'SetValue', 'proveInType', PiType)
|
||||
PiChecklistOrderId = PiCheckListOrderIds<0, vPos>
|
||||
SRP_JSON(objProveIn, 'SetValue', 'proveInOrderId', PiChecklistOrderId)
|
||||
SRP_JSON(objPiChecklistArray, 'Add', objProveIn)
|
||||
SRP_JSON(objProveIn, 'Release')
|
||||
end
|
||||
Next PiType
|
||||
SRP_JSON(objReactor, 'Set', 'proveInChecklists', objPiChecklistArray)
|
||||
SRP_JSON(objPiChecklistArray)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
If itemURL NE '' then
|
||||
// The itemURL was passed in so add HAL+JSON properties.
|
||||
objLinks = ''
|
||||
@ -2595,6 +2716,7 @@ Service ConvertJSONToRecord(KeyID, JSON)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service CleanReactStatus()
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
@ -2687,12 +2809,13 @@ Service GetReactModeKeysByTimeSpan(ReactorNo, StartDtm, StopDtm)
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetReactorUptimePercentageByTimeSpan(ReactorNo, StartDtm, StopDtm)
|
||||
Service GetReactorUptimeMetricsByTimeSpan(ReactorNo, StartDtm, StopDtm)
|
||||
ToolData = ''
|
||||
|
||||
TotalProductiveMinutes = 0
|
||||
TotalUnscheduledDownMinutes = 0
|
||||
TotalScheduledDownMinutes = 0
|
||||
TotalNonSchedMinutes = 0
|
||||
TotalEngMinutes = 0
|
||||
|
||||
Begin Case
|
||||
Case ReactorNo Eq ''
|
||||
@ -2843,27 +2966,106 @@ Service GetReactorUptimePercentageByTimeSpan(ReactorNo, StartDtm, StopDtm)
|
||||
end
|
||||
end
|
||||
TotalScheduledDownMinutes += MinutesInMode
|
||||
Case E10State EQ 'Non-Scheduled' OR E10State EQ 'Standby'
|
||||
if ModeStartDtm LT StartDtm then
|
||||
//Mode Started Earlier than report time
|
||||
If ModeStopDtm LT StopDtm then
|
||||
//Mode finished within the timespan
|
||||
If ModeStopDtm NE '' then
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, ModeStopDtm)
|
||||
end else
|
||||
//Mode is not closed
|
||||
|
||||
If ModeStartDtm LT StartDtm then
|
||||
//if ModeStartDtm is before StartDtm and is not close used the total report timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, StopDtm)
|
||||
end else
|
||||
//Use the ModeStartDtm and the StopDtm
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end
|
||||
end else
|
||||
//Mode finished after the timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, StopDtm)
|
||||
end
|
||||
end else
|
||||
//Mode started after report time
|
||||
If ModeStopDtm LT StopDtm then
|
||||
//Mode finished within the timespan OR isn't yet closed
|
||||
If ModeStopDtm NE '' then
|
||||
//Mode is closed. Started and finished within the report time so use the Mode's start and stop
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, ModeStopDtm)
|
||||
end else
|
||||
//Mode is not closed. Started within the report time but has yet to stop.
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end else
|
||||
//Mode finished after the timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end
|
||||
TotalNonSchedMinutes += MinutesInMode
|
||||
Case E10State EQ 'Engineering'
|
||||
if ModeStartDtm LT StartDtm then
|
||||
//Mode Started Earlier than report time
|
||||
If ModeStopDtm LT StopDtm then
|
||||
//Mode finished within the timespan
|
||||
If ModeStopDtm NE '' then
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, ModeStopDtm)
|
||||
end else
|
||||
//Mode is not closed
|
||||
|
||||
If ModeStartDtm LT StartDtm then
|
||||
//if ModeStartDtm is before StartDtm and is not close used the total report timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, StopDtm)
|
||||
end else
|
||||
//Use the ModeStartDtm and the StopDtm
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end
|
||||
end else
|
||||
//Mode finished after the timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', StartDTM, StopDtm)
|
||||
end
|
||||
end else
|
||||
//Mode started after report time
|
||||
If ModeStopDtm LT StopDtm then
|
||||
//Mode finished within the timespan OR isn't yet closed
|
||||
If ModeStopDtm NE '' then
|
||||
//Mode is closed. Started and finished within the report time so use the Mode's start and stop
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, ModeStopDtm)
|
||||
end else
|
||||
//Mode is not closed. Started within the report time but has yet to stop.
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end else
|
||||
//Mode finished after the timespan
|
||||
MinutesInMode = SRP_Datetime('MinuteSpan', ModeStartDtm, StopDtm)
|
||||
end
|
||||
end
|
||||
TotalEngMinutes += MinutesInMode
|
||||
End Case
|
||||
If E10State EQ 'Productive' then
|
||||
|
||||
end
|
||||
|
||||
Next key
|
||||
ProdPercentage = (TotalProductiveMinutes / TotalReportMinutes) * 100
|
||||
UnschedDownPercentage = (TotalUnscheduledDownMinutes / TotalReportMinutes) * 100
|
||||
SchedDownPercentage = (TotalScheduledDownMinutes / TotalReportMinutes) * 100
|
||||
NonSchedPercentage = (TotalNonSchedMinutes / TotalReportMinutes) * 100
|
||||
EngPercentage = (TotalEngMinutes / TotalReportMinutes) * 100
|
||||
|
||||
EQU PRODUCTIVE$ To 1
|
||||
EQU UNSCHED$ to 2
|
||||
EQU SCHED$ to 3
|
||||
|
||||
//Percentages
|
||||
ToolData<1, PRODUCTIVE$> = ProdPercentage
|
||||
ToolData<1, UNSCHED$> = UnschedDownPercentage
|
||||
ToolData<1, SCHED$> = SchedDownPercentage
|
||||
ToolData<1, NONSCHED$> = NonSchedPercentage
|
||||
ToolData<1, ENG$> = EngPercentage
|
||||
//Total Minutes
|
||||
ToolData<2, PRODUCTIVE$> = TotalProductiveMinutes
|
||||
ToolData<2, UNSCHED$> = TotalUnscheduledDownMinutes
|
||||
ToolData<2, SCHED$> = TotalScheduledDownMinutes
|
||||
ToolData<2, NONSCHED$> = TotalNonSchedMinutes
|
||||
ToolData<2, ENG$> = TotalEngMinutes
|
||||
Response = ToolData
|
||||
end else
|
||||
Response = Error_Services('GetMessage')
|
||||
@ -2873,6 +3075,125 @@ Service GetReactorUptimePercentageByTimeSpan(ReactorNo, StartDtm, StopDtm)
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetReactorUptimeMetricsByTypeAndTimeSpan(startDtm, endDtm, reactType)
|
||||
Begin Case
|
||||
Case startDtm EQ ''
|
||||
Error_Services('Add', 'Error getting reactor uptime metrics -> Report start date not supplied')
|
||||
Case endDtm EQ ''
|
||||
Error_Services('Add', 'Error getting reactor uptime metrics -> Report end date not supplied')
|
||||
End Case
|
||||
If reactType EQ '' then reactType = 'ALL'
|
||||
If Error_Services('NoError') then
|
||||
If endDtm GT Date() then
|
||||
//This sets the current report end time to the current time.
|
||||
endDtm = Datetime()
|
||||
end
|
||||
reportMinutes = SRP_Datetime('MinuteSpan', startDtm, endDtm)
|
||||
if num(reportMinutes) then
|
||||
Begin Case
|
||||
Case reactType EQ 'ASM' or reactType EQ 'ASM+'
|
||||
Reactors = Reactor_Services('GetReactorNumbers', 'ASM') : @FM : Reactor_Services('GetReactorNumbers', 'ASM+')
|
||||
Case reactType EQ 'HTR'
|
||||
Reactors = Reactor_Services('GetReactorNumbers', 'HTR')
|
||||
Case reactType EQ 'EPP'
|
||||
Reactors = Reactor_Services('GetReactorNumbers', 'EPP')
|
||||
Case reactType EQ 'ALL'
|
||||
Reactors = Reactor_Services('GetReactorNumbers', 'ASM') : @FM : Reactor_Services('GetReactorNumbers', 'ASM+') : @FM : Reactor_Services('GetReactorNumbers', 'HTR') : @FM : Reactor_Services('GetReactorNumbers', 'EPP')
|
||||
End Case
|
||||
AllReactorsScheduledMinutes = 0
|
||||
AllReactorsUptimeMinutes = 0
|
||||
AllReactorsProdMinutes = 0
|
||||
AllReactorsUnschedDownMinutes = 0
|
||||
AllReactorsSchedDownMinutes = 0
|
||||
AllReactorsEngMinutes = 0
|
||||
AllReactorsIdleMinutes = 0
|
||||
AllReactorsSingleLL= 0
|
||||
TotalMinutesUp = 0
|
||||
ReactorsData = ''
|
||||
ReactorsExcluded = ''
|
||||
for each Reactor in Reactors using @FM
|
||||
ReactorStateTimes = Reactor_Services('GetReactorUptimeMetricsByTimeSpan', Reactor, startDtm, endDtm)
|
||||
PercentProd = ReactorStateTimes<1,PRODUCTIVE$>
|
||||
MinuteProd = ReactorStateTimes<2,PRODUCTIVE$>
|
||||
PercentUnSchedDown = ReactorStateTimes<1,UNSCHED$>
|
||||
MinuteUnschedDown = ReactorStateTimes<2,UNSCHED$>
|
||||
PercentSchedDown = ReactorStateTimes<1,SCHED$>
|
||||
MinuteSchedDown = ReactorStateTimes<2,SCHED$>
|
||||
PercentNonSched = ReactorStateTimes<1,NONSCHED$>
|
||||
MinutesNonSched = ReactorStateTimes<2,NONSCHED$>
|
||||
PercentEng = ReactorStateTimes<1, ENG$>
|
||||
MinutesEng = ReactorStateTimes<2, ENG$>
|
||||
if MinutesNonSched LT reportMinutes then
|
||||
thisReactorExpectedAvailMinutes = reportMinutes - MinutesNonSched; * This is the amount of minutes the single reactor was scheduled to run work.
|
||||
AllReactorsScheduledMinutes += thisReactorExpectedAvailMinutes; * Add it to the collective of reactors
|
||||
thisReactorUptimeMinutes = MinuteProd + MinutesEng
|
||||
AllReactorsUptimeMinutes = thisReactorUptimeMinutes + AllReactorsUptimeMinutes
|
||||
AllReactorsProdMinutes += MinuteProd
|
||||
AllReactorsUnschedDownMinutes += MinuteUnschedDown
|
||||
AllReactorsSchedDownMinutes += MinuteSchedDown
|
||||
AllReactorsEngMinutes += MinutesEng
|
||||
AllReactorsIdleMinutes += MinutesNonSched
|
||||
if reactType NE 'EPP' then
|
||||
thisReactorDisabledLoadLock = Reactor_Services('GetReactorDownLL', Reactor) NE ''
|
||||
AllReactorsSingleLL += thisReactorDisabledLoadLock
|
||||
end else
|
||||
thisReactorDisabledLoadLock = 0
|
||||
end
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTORS$,-1> = Reactor
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_PERCENTAGE$,-1> = PercentProd
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_PROD_MINUTES$,-1> = MinuteProd
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_PERCENTAGE$, -1> = PercentEng
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_ENG_MINUTES$, -1> = MinutesEng
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_PERCENTAGE$, -1> = PercentUnSchedDown
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_UNSCHED_MINUTES$, -1> = MinuteUnschedDown
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_PERCENTAGE$, -1> = PercentSchedDown
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_DOWN_SCHED_MINUTES$, -1> = MinuteSchedDown
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_PERCENTAGE$, -1> = PercentNonSched
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_IDLE_MINUTES$, -1> = MinutesNonSched
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_INCL_REACTOR_SINGLE_LL$, -1> = thisReactorDisabledLoadLock
|
||||
end else
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_EXCLUDED_REACTORS$, -1> = Reactor
|
||||
end
|
||||
Next Reactor
|
||||
if AllReactorsScheduledMinutes GT 0 then
|
||||
TotalUptimePercent = SRP_Math('ROUND', AllReactorsUptimeMinutes / AllReactorsScheduledMinutes, 5)
|
||||
TotalUptimeMinutes = SRP_Math('ROUND', AllReactorsUptimeMinutes, 5)
|
||||
TotalAvailMinutes = SRP_Math('ROUND', AllReactorsScheduledMinutes, 5)
|
||||
TotalProdPercent = SRP_Math('ROUND', AllReactorsProdMinutes / AllReactorsScheduledMinutes, 5)
|
||||
TotalUnschedDownPercent = SRP_Math('ROUND', AllReactorsUnschedDownMinutes / AllReactorsScheduledMinutes, 5)
|
||||
TotalSchedDownPercent = SRP_Math('ROUND', AllReactorsSchedDownMinutes / AllReactorsScheduledMinutes, 5)
|
||||
TotalEngPercent = SRP_Math('ROUND', AllReactorsEngMinutes / AllReactorsScheduledMinutes, 5)
|
||||
TotalIdlePercent = SRP_Math('ROUND', AllReactorsIdleMinutes / AllReactorsScheduledMinutes, 5)
|
||||
end else
|
||||
TotalUptimePercent = 0
|
||||
TotalUptimeMinutes = 0
|
||||
TotalAvailMinutes = 0
|
||||
TotalProdPercent = 0
|
||||
TotalUnschedDownPercent = 0
|
||||
TotalSchedDownPercent = 0
|
||||
TotalEngPercent = 0
|
||||
TotalIdlePercent = 0
|
||||
end
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_UPTIME_PERCENTAGE$> = TotalUptimePercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_PROD_PERCENTAGE$> = TotalProdPercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_PROD_MINUTES$> = AllReactorsProdMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_ENG_PERCENTAGE$> = TotalEngPercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_ENG_MINUTES$> = AllReactorsEngMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_PERCENTAGE$> = TotalUnschedDownPercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_DOWN_UNSCHED_MINUTES$> = AllReactorsUnschedDownMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_PERCENTAGE$> = TotalSchedDownPercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_DOWN_SCHED_MINUTES$> = AllReactorsSchedDownMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_IDLE_PERCENTAGE$> = TotalIdlePercent
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_IDLE_MINUTES$> = AllReactorsIdleMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_UPTIME_MINUTES$> = TotalUptimeMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_AVAIL_MINUTES$> = TotalAvailMinutes
|
||||
ReactorsData<REACTOR_DAILY_UPTIME_TOTAL_SINGLE_LL$> = AllReactorsSingleLL
|
||||
Response = ReactorsData
|
||||
end else
|
||||
Error_Services('Add', 'Error getting reactor uptime metrics -> Unable to get total report duration.')
|
||||
end
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetLoadedRds(ReactNo)
|
||||
StopRDS = Xlate('REACT_STATE', ReactNo, 'LAST_RDS_NO', 'X')
|
||||
@ -2912,11 +3233,540 @@ Service GetLoadedRds(ReactNo)
|
||||
Response = RdsKeys
|
||||
end service
|
||||
|
||||
Service CreateReactorProveInOrder(ReactNo, ProveInType)
|
||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn'
|
||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorProveIn.csv'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Attempting to craete prove in order for reactor ':ReactNo:' of type ':ProveInType
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
|
||||
CurrentProveInTypes = ReactorRec<REACTOR_PROVE_IN_TYPE$>
|
||||
ProveInTypeAlreadyActive = False$
|
||||
for each ActiveProveInType in CurrentProveInTypes using @VM setting dummy
|
||||
If ActiveProveInType EQ ProveInType then
|
||||
ProveInTypeAlreadyActive = True$
|
||||
end
|
||||
Next ActiveProveInType
|
||||
|
||||
If ProveInTypeAlreadyActive EQ False$ then
|
||||
ReactorRec<REACTOR_PROVE_IN_ACTIVE$> = True$
|
||||
|
||||
If CurrentProveInTypes NE '' then
|
||||
ReactorRec<REACTOR_PROVE_IN_TYPE$> = CurrentProveInTypes : @VM : ProveInType
|
||||
end else
|
||||
ReactorRec<REACTOR_PROVE_IN_TYPE$> = ProveInType
|
||||
end
|
||||
If ProveInType EQ 'INITIATE_IDLE' then
|
||||
ReactorRec<REACTOR_IDLE_STARTUP_REQUIRED$> = True$
|
||||
end
|
||||
|
||||
// Call the API
|
||||
ProveInUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||
ProveInUrl = ProveInUrl:'checklistType=':ProveInType
|
||||
ProveInUrl = ProveInUrl:'&reactorNumber=':ReactNo
|
||||
|
||||
Retries = 3
|
||||
BackoffSeconds = 1
|
||||
IsSuccessful = False$
|
||||
|
||||
OrderId = ''
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (2 - retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
|
||||
Retries = Retries - 1
|
||||
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '')
|
||||
If HttpResponseJson NE '' then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
|
||||
If orderId NE '' then
|
||||
IsSuccessful = True$
|
||||
Response = OrderId
|
||||
end
|
||||
end
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
Repeat
|
||||
|
||||
CurrentOrderIds = ReactorRec<REACTOR_PROVE_IN_ORDER_ID$>
|
||||
If CurrentOrderIds NE '' then
|
||||
ReactorRec<REACTOR_PROVE_IN_ORDER_ID$> = CurrentOrderIds : @VM : OrderId
|
||||
end else
|
||||
ReactorRec<REACTOR_PROVE_IN_ORDER_ID$> = OrderId
|
||||
end
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', ReactNo, ReactorRec)
|
||||
If Environment_Services('IsProd') then
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||
end else
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||
end
|
||||
StatusName = 'CreateReactorProveInOrder'
|
||||
If IsSuccessful then
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Successfully created prove in order for reactor ':ReactNo:' of type ':ProveInType
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||
end else
|
||||
Response = 'error'
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Error encountered when attempting to create prove in order for reactor ':ReactNo:' of type ':ProveInType
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||
|
||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not create NICA order.')
|
||||
end
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetReactorProveInStatus(ReactNo)
|
||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn'
|
||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorProveIn.csv'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Attempting to fetch prove in order for reactor ':ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Response = True$
|
||||
IsSuccessful = True$
|
||||
|
||||
// Check flag on reactor first, then call api if necessary
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
ProveInActive = ReactorRec<REACTOR_PROVE_IN_ACTIVE$>
|
||||
If ProveInActive then
|
||||
BaseProveInUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||
|
||||
ProveInOrderIds = ReactorRec<REACTOR_PROVE_IN_ORDER_ID$>
|
||||
ProveInOrderIdList = SRP_List("Create", ProveInOrderIds, @VM)
|
||||
ProveInTypes = ReactorRec<REACTOR_PROVE_IN_TYPE$>
|
||||
ProveInTypeList = SRP_List("Create", ProveInTypes, @VM)
|
||||
for each ProveInOrderId in ProveInOrderIds using @VM setting Idx
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Fetching prove in order ':ProveInOrderId
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
ProveInUrl = BaseProveInUrl:'checklistOrderId=':ProveInOrderId
|
||||
|
||||
Retries = 3
|
||||
BackoffSeconds = 1
|
||||
IsSuccessful = False$
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (2 - Retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
|
||||
Retries = Retries - 1
|
||||
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '')
|
||||
If HttpResponseJson NE '' then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
If IsComplete EQ True$ then
|
||||
SRP_List('RemoveAt', ProveInOrderIdList, Idx)
|
||||
ProveInType = SRP_List("GetAt", ProveInTypeList, Idx)
|
||||
If ProveInType _EQC 'IDLE' then
|
||||
ReactorRec<REACTOR_IDLE_STARTUP_REQUIRED$> = False$
|
||||
end
|
||||
SRP_List('RemoveAt', ProveInTypeList, Idx)
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
end
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
|
||||
If Response EQ True$ or Response EQ False$ then
|
||||
IsSuccessful = True$
|
||||
end
|
||||
Repeat
|
||||
Next ProveInOrderId
|
||||
|
||||
If Environment_Services('IsProd') then
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||
end else
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||
end
|
||||
StatusName = 'GetReactorProveInOrderStatus'
|
||||
If IsSuccessful and Response NE 'error' then
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Successfully fetched prove in order for reactor ':ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||
end else
|
||||
Response = 'error'
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Error encountered when fetching prove in order for reactor ':ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||
|
||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not retrieve NICA order status.')
|
||||
end
|
||||
|
||||
ReactorRec<REACTOR_PROVE_IN_ORDER_ID$> = SRP_List("GetVariable", ProveInOrderIdList, @VM)
|
||||
ReactorRec<REACTOR_PROVE_IN_TYPE$> = SRP_List("GetVariable", ProveInTypeList, @VM)
|
||||
SRP_List('Release', ProveInTypeList)
|
||||
|
||||
OrderIdCount = SRP_List("Count", ProveInOrderIdList)
|
||||
SRP_List("Release", ProveInOrderIdList)
|
||||
// remove flag if prove in passed
|
||||
If OrderIdCount EQ 0 then
|
||||
ReactorRec<REACTOR_PROVE_IN_ACTIVE$> = False$
|
||||
end
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', ReactNo, ReactorRec)
|
||||
end
|
||||
end service
|
||||
|
||||
|
||||
Service CancelReactorProveIn(ReactNo, OrderId)
|
||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn'
|
||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_ReactorProveIn.csv'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Attempting to cancel prove in order ' : OrderId : ' for reactor ' : ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Response = False$
|
||||
|
||||
BaseProveInUrl = Environment_Services("GetProveInApiUrl"):'/checklists?'
|
||||
|
||||
ProveInUrl = BaseProveInUrl:'checklistOrderId=':OrderId
|
||||
ProveInUrl = ProveInUrl:'&checklistState=cancelled'
|
||||
|
||||
Retries = 3
|
||||
BackoffSeconds = 1
|
||||
IsSuccessful = False$
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (2 - Retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
|
||||
Retries = Retries - 1
|
||||
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', '', '', '')
|
||||
If HttpResponseJson NE '' then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
|
||||
If IsComplete EQ True$ then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
end
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
|
||||
If Response EQ True$ or Response EQ False$ then
|
||||
IsSuccessful = True$
|
||||
end
|
||||
Repeat
|
||||
|
||||
If Environment_Services('IsProd') then
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_MESAPROVEINAPI'
|
||||
end else
|
||||
MonAResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_MESAPROVEINAPI_DEV'
|
||||
end
|
||||
StatusName = 'UpdateReactorProveInOrderState'
|
||||
If IsSuccessful and Response NE 'error' then
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
ProveInOrderIds = ReactorRec<REACTOR_PROVE_IN_ORDER_ID$>
|
||||
ProveInOrderIdList = SRP_List('Create', ProveInOrderIds, @VM)
|
||||
ProveInTypes = ReactorRec<REACTOR_PROVE_IN_TYPE$>
|
||||
ProveInTypeList = SRP_List('Create', ProveInTypes, @VM)
|
||||
|
||||
for each ProveInOrderId in ProveInOrderIds using @VM setting Idx
|
||||
If OrderId EQ ProveInOrderId then
|
||||
ProveInType = SRP_List('GetAt', ProveInTypeList, Idx)
|
||||
If ProveInType EQ 'IDLE' then
|
||||
ReactorRec<REACTOR_IDLE_STARTUP_REQUIRED$> = False$
|
||||
end
|
||||
|
||||
SRP_List('RemoveAt', ProveInOrderIdList, Idx)
|
||||
SRP_List('RemoveAt', ProveInTypeList, Idx)
|
||||
end
|
||||
Next ProveInOrderId
|
||||
|
||||
ReactorRec<REACTOR_PROVE_IN_ORDER_ID$> = SRP_List("GetVariable", ProveInOrderIdList, @VM)
|
||||
ReactorRec<REACTOR_PROVE_IN_TYPE$> = SRP_List("GetVariable", ProveInTypeList, @VM)
|
||||
SRP_List('Release', ProveInTypeList)
|
||||
|
||||
OrderIdCount = SRP_List("Count", ProveInOrderIdList)
|
||||
SRP_List("Release", ProveInOrderIdList)
|
||||
// remove flag if prove in passed
|
||||
If OrderIdCount EQ 0 then
|
||||
ReactorRec<REACTOR_PROVE_IN_ACTIVE$> = False$
|
||||
end
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', ReactNo, ReactorRec)
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Successfully cancelled prove in order ' : ProveInOrderId : ' for reactor ' : ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Ok')
|
||||
end else
|
||||
Response = 'error'
|
||||
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'Error encountered cancelling prove in order ' : ProveInOrderId : ' for reactor ' : ReactNo
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
|
||||
|
||||
Error_Services('Add', 'Error in ' : Service : ' service. Could not cancel NICA order')
|
||||
end
|
||||
end service
|
||||
|
||||
Service ActiveProveInPreventsModeChange(ReactNo, NewMode, CurrentMode)
|
||||
If (ReactNo EQ '') then
|
||||
Error_Services('Add', 'Error in ' : Service : ' service. ReactNo was empty')
|
||||
end
|
||||
|
||||
If (NewMode EQ '') then
|
||||
Error_Services('Add', 'Error in ' : Service : ' service. NewMode was empty')
|
||||
end
|
||||
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
ActiveProveIn = ReactorRec<REACTOR_PROVE_IN_ACTIVE$>
|
||||
If ActiveProveIn EQ True$ then
|
||||
Reactor_Services('GetReactorProveInStatus', ReactNo)
|
||||
If Error_Services('HasError') then
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
Error_Services('Add', ErrMsg)
|
||||
end else
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
ActiveProveIn = ReactorRec<REACTOR_PROVE_IN_ACTIVE$>
|
||||
If ActiveProveIn EQ True$ then
|
||||
Begin Case
|
||||
Case CurrentMode EQ 'INITIATE_IDLE'
|
||||
IdleStartupActive = False$
|
||||
CurrentProveInTypes = ReactorRec<REACTOR_PROVE_IN_TYPE$>
|
||||
for each ProveInType in CurrentProveInTypes using @VM setting dummy
|
||||
If ProveInType EQ 'INITIATE_IDLE' then IdleStartupActive = True$
|
||||
Next ProveInType
|
||||
If IdleStartupActive EQ True$ then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
Case Len(NewMode) GE 2 and NewMode[1, 2] EQ 'UP'
|
||||
Response = True$
|
||||
Case Otherwise$
|
||||
Response = False$
|
||||
End Case
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
end
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetReactorDownLL(ReactNo)
|
||||
Response = ''
|
||||
If RowExists('REACTOR', ReactNo) then
|
||||
LLDisabledID = Database_Services('ReadDataColumn', 'REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$, True$, 0)
|
||||
If LLDisabledID NE '' then
|
||||
If RowExists('REACT_LL', LLDisabledID) then
|
||||
DownLoadLock = Database_Services('ReadDataColumn', 'REACT_LL', LLDisabledID, REACT_LL_DISABLED$, True$, 0)
|
||||
Response = DownLoadLock
|
||||
end
|
||||
end
|
||||
end
|
||||
end service
|
||||
|
||||
Service GetReactorLoadCountLimit(ReactNo)
|
||||
|
||||
ErrMsg = 'Error in ReactorServices -> GetReactorLoadCountLimit: '
|
||||
MaxLoadCount = 999
|
||||
If ReactNo NE '' then
|
||||
If RowExists('REACTOR', ReactNo) then
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
|
||||
If Error_Services('NoError') then
|
||||
ReactType = ReactorRec<REACTOR_REACT_TYPE$>
|
||||
PickPlace = ReactorRec<REACTOR_PICK_PLACE$>
|
||||
DisabledLoadLockCnt = DCount(ReactorRec<REACTOR_ACTIVE_LL_DISABLED$>, @VM)
|
||||
Begin Case
|
||||
Case ReactType EQ 'ASM'
|
||||
If PickPlace then
|
||||
MaxLoadCount = 2 - DisabledLoadLockCnt
|
||||
end else
|
||||
MaxLoadCount = 1
|
||||
end
|
||||
Case ReactType EQ 'ASM+'
|
||||
If PickPlace then
|
||||
MaxLoadCount = 2 - DisabledLoadLockCnt
|
||||
end else
|
||||
MaxLoadCount = 1
|
||||
end
|
||||
Case ReactType EQ 'HTR'
|
||||
If PickPlace then
|
||||
MaxLoadCount = 2 - DisabledLoadLockCnt
|
||||
end else
|
||||
MaxLoadCount = 1
|
||||
end
|
||||
Case ReactType EQ 'EPP'
|
||||
MaxLoadCount = 2;*EPP needs to have an additional load capability.
|
||||
End Case
|
||||
end else
|
||||
ErrMsg := Error_Services('GetMessage')
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
ErrMsg := 'Reactor ' : ReactNo : ' does not exist.'
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
ErrMsg := 'Reactor Number was null.'
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
Response = MaxLoadCount
|
||||
end service
|
||||
|
||||
Service GetReactorAvailChamberCount(ReactNo)
|
||||
ErrMsg = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
|
||||
AvailableChamberCount = 0
|
||||
If ReactNo NE '' then
|
||||
If RowExists('REACTOR', ReactNo) then
|
||||
LoadedRDS = Reactor_Services('GetReactorCurrLoadRDS', ReactNo)
|
||||
ReactorCurrLoadCnt = DCount(LoadedRDS, @VM)
|
||||
ReactorCurrCapacity = Reactor_Services('GetReactorLoadCountLimit', ReactNo)
|
||||
AvailableChamberCount = ReactorCurrCapacity - ReactorCurrLoadCnt
|
||||
end else
|
||||
ErrMsg := 'Reactor ' : ReactNo : ' does not exist.'
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
ErrMsg := 'Reactor Number was null.'
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
Response = AvailableChamberCount
|
||||
end service
|
||||
|
||||
Service RemoveRDSFromReactorLoad(RDSNo, ReactorNo, User)
|
||||
Response = 0
|
||||
If User NE '' then
|
||||
If RDSNo NE '' then
|
||||
If ReactorNo NE '' then
|
||||
ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
Locate RDSNo in ReactStatusRec<REACT_STATUS_LOAD_RDS$> setting RDSPos then
|
||||
ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS$, RDSPos, 0)
|
||||
ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS_DTM$, RDSPos, 0)
|
||||
ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_CASS_ID$, RDSPos, 0)
|
||||
ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_DTM$, RDSPos, 0)
|
||||
Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1)
|
||||
If Error_Services('NoError') then
|
||||
Response = 1
|
||||
end else
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: RDS was not found as a loaded lot.')
|
||||
end
|
||||
end else
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Username was supplied.')
|
||||
end
|
||||
|
||||
|
||||
end service
|
||||
|
||||
Service AddRDSToReactorLoad(RDSNo, ReactorNo)
|
||||
Response = 0
|
||||
If RDSNo NE '' then
|
||||
If ReactorNo NE '' then
|
||||
ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo)
|
||||
If Error_Services('NoError') then
|
||||
Locate RDSNo in ReactStatusRec<REACT_STATUS_LOAD_RDS$> using @VM setting iPos else
|
||||
WONo = Xlate('RDS', RDSNo, 'WO_NO', 'X')
|
||||
CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X')
|
||||
WOMatKey = WONo : '*' : CassNo
|
||||
ThisDTM = SRP_Datetime('Now')
|
||||
ReactStatusRec<REACT_STATUS_LOAD_RDS$, -1> = RDSNo
|
||||
ReactStatusRec<REACT_STATUS_LOAD_RDS_DTM$, -1> = ThisDTM
|
||||
ReactStatusRec<REACT_STATUS_LOAD_CASS_ID$, -1> = WOMatKey
|
||||
ReactStatusRec<REACT_STATUS_LOAD_DTM$, -1> = ThisDTM
|
||||
Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1)
|
||||
end
|
||||
end else
|
||||
ErrMsg = Error_Services('GetMessage')
|
||||
Error_Services('Add', ErrMsg)
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.')
|
||||
end
|
||||
end service
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
RollbackReactUtil:
|
||||
|
||||
// Reopen previous REACT_UTIL record
|
||||
@ -2939,7 +3789,3 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user