Files
egtbeamwall/EgtBEAMWALL.Supervisor/ViewerOptimizerCommThread/ViewerOptimizerComm.vb
T
Emmanuele Sassi ee558cecd6 - Migliorie Calc pezzi
- Correzione flip e rot dei duplo
- Cambiata gestione ricalcolo in supervisore
- Aggiunti controlli su comunicazione tra programmi
- Gestione apertura progetto con s/blocco duplo
- Gestione errore ricalcolo in supervisore
- Aggiunti controlli su cicli di comunicazione tra programmi
2022-02-03 21:49:05 +01:00

113 lines
5.6 KiB
VB.net

Imports EgtBEAMWALL.DataLayer.DatabaseModels
Public Class ViewerOptimizerComm
Sub New()
' imposto in Map
'Map.SetRefMachManaging(Me)
End Sub
Friend Sub Timer_Tick()
' se c'e' un progetto aperto o in caricamento
If IsNothing(Map.refSupervisorManagerVM.CurrProd) OrElse Map.refSupervisorManagerVM.bLoadingProd Then Return
' recupero indice modifica del prod
Dim nModificationIndex As Integer = 0
Dim ActiveSessionList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetProd()
For Each ActiveSession In ActiveSessionList
If ActiveSession.ItemId = Map.refSupervisorManagerVM.CurrProd.nProdId Then
nModificationIndex = ActiveSession.Index
End If
Next
' se indice letto diverso da indice gia' presente
If nModificationIndex <> Map.refSupervisorManagerVM.CurrProd.nModificationIndex Then
' recupero elementi modificati
Dim MachGroupList As List(Of StatusMapModel) = DbControllers.m_StatusMapController.GetFrom(Map.refSupervisorManagerVM.CurrProd.nModificationIndex + 1)
Dim bReloadFile As Boolean = False
For Each MachGroupModification In MachGroupList
If MachGroupModification.ItemType = Core.StatusMapItemType.MachGroup Then
Select Case MachGroupModification.Operation
Case Core.StatusMapOpType.MachGroupAdd
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Add(MachGroupModification.ItemId, {MachGroupModification.Index, MachGroupModification.Index})
Case Core.StatusMapOpType.MachGroupMod
If Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.ContainsKey(MachGroupModification.ItemId) Then
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList(MachGroupModification.ItemId)(0) = MachGroupModification.Index
Else
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Add(MachGroupModification.ItemId, {MachGroupModification.Index, 0})
End If
Case Core.StatusMapOpType.MachGroupRem
If Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.ContainsKey(MachGroupModification.ItemId) Then
Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Remove(MachGroupModification.ItemId)
End If
Case Core.StatusMapOpType.MachGroupAssignedToSupervisor
Dim MachgroupIndexes As Integer() = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList(MachGroupModification.ItemId)
' se indice di aggiornamento file diverso da indice ultima modifica
If MachgroupIndexes(0) <> MachgroupIndexes(1) Then
' devo ricaricare il file
bReloadFile = True
' ricarico il progetto
Map.refProjectVM.SupervisorMachGroupPanelVM.ReloadProjectFile()
Else
Dim ProdMachGroup As MyMachGroupVM = Map.refProjectVM.ProdMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = MachGroupModification.ItemId)
If Not IsNothing(ProdMachGroup) Then
ProdMachGroup.dtStartTime = DateTime.MinValue
ProdMachGroup.dtEndTime = DateTime.MinValue
ProdMachGroup.MyMachGroupM.SetProductionState(Core.ItemState.Assigned)
Dim DBMachGroup As MachGroupModel = DbControllers.m_MachGroupController.FindByMachGroupId(Map.refSupervisorManagerVM.CurrProd.nProdId, ProdMachGroup.Id)
If Not IsNothing(DBMachGroup) Then ProdMachGroup.SetProductionIndex(DBMachGroup.ProdIndex)
For Each Part In ProdMachGroup.PartVMList
Part.dtStartTime = DateTime.MinValue
Part.dtEndTime = DateTime.MinValue
Part.nProduction_State = Core.ItemState.Assigned
Next
' lo aggiungo alla lista di MachGroup
Map.refProjectVM.SupervisorMachGroupPanelVM.AddMachGroupToSupervisor(ProdMachGroup)
End If
End If
End Select
ElseIf MachGroupModification.ItemType = Core.StatusMapItemType.Comm AndAlso MachGroupModification.Operation = Core.StatusMapOpType.ViewOptimStoped Then
ViewerOptimizerCommThread.SetViewerOptimizerBlocked(True)
End If
Next
' se devo ricaricare il file
If bReloadFile Then
' aggiorno indici in dictionary
For Each MachGroupModification In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupFullList.Where(Function(x) x.Value(0) <> x.Value(1))
MachGroupModification.Value(1) = MachGroupModification.Value(0)
Next
' ricarico il progetto
'Map.refProjectVM.SupervisorMachGroupPanelVM.ReloadProjectFile()
End If
' aggiorno indice del prod
Map.refSupervisorManagerVM.CurrProd.SetModificationIndex(nModificationIndex)
End If
' verifico se e' aperto in qualche ottimizzatore
'DbControllers.m_ProdController.
'Map.refSupervisorManagerVM.CurrProd.bIsLocked
' verifico se la mappa messaggi ha indice maggiore del mio
' ricarico il progetto
' aggiorno eventuali nuovi machgroup
' se devo ripartire a meta' di una barra
' mando messaggio di blocco dell'ottimizzatore
End Sub
End Class