public Response <object> ChangePasswordForFirstTime(UserChangePasswordForFirstTimeModel _) { var user = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name); var userBefore = CloneObject.Clone(user); //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount) //{ // _saveLog.LogInformation("User with Active Directory cannot change password from this system!"); // return new Response<object>(PublicResultStatusCodes.NotAllowedOperation); //} var checkPassword = PasswordHelper.ValidatePassword(_.NewPassword); if (checkPassword) { var hashHelper = new HashHelper(_.NewPassword); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; user.ChangePasswordNeeded = false; var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <object>(PublicResultStatusCodes.Done)); } _saveLog.LogInformation("Password must have at least six characters, one upperCase and one number!"); return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid)); }
public Response <object> ChangePasswordFromResetPasswordLink(ResetPasswordModel _) { var user = _repository.GetUserById(_.Id); var userBefore = CloneObject.Clone(user); //EntryUpdateUserHelper.FillUpdateData(ref user); if (user != null) { var hash = HashHelper.GetSha256FromString(user.Account + " " + user.ID + "$aa$" + user.EntryDate); if (!hash.Equals(_.Hash)) { return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid)); } var hashHelper = new HashHelper(_.Password); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; user.ResetPasswordToken = Guid.NewGuid(); var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <object>(PublicResultStatusCodes.Done)); } return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid)); }
public Response <object> ChangePassword(UserChangePasswordModel _) { var user = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name); var userBefore = CloneObject.Clone(user); //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount) //{ // _saveLog.LogInformation("User with Active Directory cannot change password from this system!"); // return new Response<object>(PublicResultStatusCodes.NotAllowedOperation); //} var checkPassword = HashHelper.Verify(user.SaltedPassword, user.Password, _.OldPassword); if (checkPassword) { var hashHelper = new HashHelper(_.NewPassword); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <object>(PublicResultStatusCodes.Done)); } _saveLog.LogInformation("Password do not match with data in Database!"); return(new Response <object>(PublicResultStatusCodes.WrongOldPassword)); }
public Response <object> ChangePasswordFromProfile(string password) { var userId = int.Parse(NetworkHelper._contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value); var user = _repository.GetUserById(userId); var userBefore = CloneObject.Clone(user); //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount) //{ // _saveLog.LogInformation("User with Active Directory cannot change password from this system!"); // return new Response<object>(PublicResultStatusCodes.NotAllowedOperation); //} var hashHelper = new HashHelper(password); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <object>(PublicResultStatusCodes.Done)); }
/// <summary> /// 编辑一条记录 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void BtnEditClickAsync(object sender, RoutedEventArgs e) { if (RecordListBox.SelectedItem is Lib.MemberPrizePunishEntity SelectedRec) { Lib.MemberPrizePunishEntity RecCloneObj = CloneObject <Lib.MemberPrizePunishEntity, Lib.MemberPrizePunishEntity> .Trans(SelectedRec); UC_PrizePunishWin AddWin = new UC_PrizePunishWin(RecCloneObj); AddWin.Owner = AppSet.AppMainWindow; if (AddWin.ShowDialog().Value) { ExcuteResult excuteResult = await DataMemberPrizePunishRepository.UpdateRecord(RecCloneObj); if (excuteResult != null && excuteResult.State == 0) { PropertyInfo[] TargetAttris = SelectedRec.GetType().GetProperties(); PropertyInfo[] SourceAttris = RecCloneObj.GetType().GetProperties(); foreach (PropertyInfo item in SourceAttris) { var tempObj = TargetAttris.Where(x => x.Name.Equals(item.Name, StringComparison.Ordinal)).FirstOrDefault(); if (tempObj != null) { item.SetValue(SelectedRec, item.GetValue(RecCloneObj)); } } } else { AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败"); } } } }
internal async Task <EST_DataExportModel> Process_DisplosedAssetList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport) { if (model == null) { return(model); } var returnList = new List <SCAuditBsm>(); model.DisplosedAssetList.ToList().ForEach(asset => { HardwareTemplate_Full newHardwareAsset; var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); if (bamTemplate != null) { newHardwareAsset = CloneObject.Clone(bamTemplate); } else { newHardwareAsset = CreateNewItem(asset); } newHardwareAsset.OwnedBy = null; newHardwareAsset.Target_HardwareAssetHasCostCenter = null; newHardwareAsset = _hardwareAssetService.SetHardwareAssetStatus(newHardwareAsset, EST_HWAssetStatus.Disposed); newHardwareAsset.Target_HardwareAssetHasLocation = null; newHardwareAsset.DisposalDate = DateTime.Now; newHardwareAsset.DisposalReference = "Esteem"; _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate); // Check Update was successful var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); if (updatedbamTemplate?.Target_HardwareAssetHasLocation?.DisplayName != "Esteem") { _reportings.Add(new BAM_ReportingBsm() { ServiceProgressReportId = serviceProgressReport.Id, SerialNumber = asset.SerialNumber, AssetStatus = EST_HWAssetStatus.Disposed, SCAudit_Item = asset, BAM_HardwareTemplate_Exception = updatedbamTemplate, ExceptionMessage = "Failed to Update" }); returnList.Add(asset); } _billables.Add(new BAM_ReportingBsm() { ServiceProgressReportId = serviceProgressReport.Id, SerialNumber = asset.SerialNumber, AssetStatus = EST_HWAssetStatus.Disposed, SCAudit_Item = asset, BAM_HardwareTemplate_Exception = updatedbamTemplate, }); }); model.DisplosedAssetList = returnList; return(model); }
private Process TryLoadProcessFromQueue() { if (ProcessesQueue.Count > 0) { if (Algorithm == SchedulerAlgorithm.FCFS) { var processFromQueue = ProcessesQueue[0]; //Process can be loaded from queue if (processFromQueue.ArrivalTime <= CurrentTime && processFromQueue.LastEnterTime == -1 || processFromQueue.LastExitTime + processFromQueue.IOTime <= CurrentTime) { ProcessesQueue.RemoveAt(0); processFromQueue.Status = ProcessStatus.OnCpu; processFromQueue.LastEnterTime = CurrentTime; return(processFromQueue); } } else if (Algorithm == SchedulerAlgorithm.SJF) { int shortestJobAvailableDuration = int.MaxValue; int it = 0; int processFromQueuePosition = -1; Process processFromQueue = null; for (; it < ProcessesQueue.Count; it++) { Process p = ProcessesQueue[it]; if (((p.ArrivalTime <= CurrentTime && p.LastEnterTime == -1) || (p.LastExitTime + p.IOTime <= CurrentTime && p.LastExitTime != -1)) && (p.BurstTime < p.RemainingDuration ? p.BurstTime : p.RemainingDuration) < shortestJobAvailableDuration) { processFromQueue = CloneObject.CloneJson(p); processFromQueuePosition = it; shortestJobAvailableDuration = p.BurstTime < p.RemainingDuration ? p.BurstTime : p.RemainingDuration; } } if (processFromQueue != null) { ProcessesQueue.RemoveAt(processFromQueuePosition); processFromQueue.Status = ProcessStatus.OnCpu; processFromQueue.LastEnterTime = CurrentTime; return(processFromQueue); } } } return(null); }
public HardwareTemplate SetHardwareAssetStatus(HardwareTemplate template, EST_HWAssetStatus hWAssetStatus) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.HardwareAssetStatus = _assetStatusService.GetAssetStatusTemplate(hWAssetStatus); return(newHardwareAsset); }
public HardwareTemplate_Full SetHardwareAssetStatus(HardwareTemplate_Full template, EST_HWAssetStatus hWAssetStatus) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.HardwareAssetStatus = _assetStatusService.HardwareAssetStatusList.FirstOrDefault(x => x.Name == hWAssetStatus.ToDescriptionString()); return(newHardwareAsset); }
public HardwareTemplate_Full SetCostCode(HardwareTemplate_Full template, string costCode) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.Target_HardwareAssetHasCostCenter = _costCenterService.CostCenterList.FirstOrDefault(x => x.DisplayName == costCode); return(newHardwareAsset); }
public HardwareTemplate SetAssetTag(HardwareTemplate template, string assetTag) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.AssetTag = assetTag; return(newHardwareAsset); }
internal async Task <EST_DataExportModel> Process_LocationChangeList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport) { if (model == null) { return(model); } var returnList = new List <SCAuditBsm>(); model.LocationChangeList.ToList().ForEach(asset => { HardwareTemplate_Full newHardwareAsset; var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); // If the Location is already set to Esteem then do nothing if (bamTemplate != null && bamTemplate.Target_HardwareAssetHasLocation?.DisplayName == "Esteem") { return; } if (bamTemplate != null) { newHardwareAsset = CloneObject.Clone(bamTemplate); } else { newHardwareAsset = CreateNewItem(asset); } newHardwareAsset = _hardwareAssetService.SetLocation(newHardwareAsset, asset.Audit_Dest_Site_Num); _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate); // Check Update was successful var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); if (updatedbamTemplate?.Target_HardwareAssetHasLocation?.DisplayName != "Esteem") { _reportings.Add(new BAM_ReportingBsm() { ServiceProgressReportId = serviceProgressReport.Id, SerialNumber = asset.SerialNumber, AssetStatus = EST_HWAssetStatus.LocationChanged, SCAudit_Item = asset, BAM_HardwareTemplate_Exception = newHardwareAsset, ExceptionMessage = "Failed to Update" }); returnList.Add(asset); } }); model.LocationChangeList = returnList; return(model); }
internal async Task <EST_DataExportModel> Process_AssetTagChangeList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport) { if (model == null) { return(model); } var returnList = new List <SCAuditBsm>(); model.AssetTagChangeList.ToList().ForEach(asset => { HardwareTemplate newHardwareAsset; var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); // If the Asset isn't null and the Tag is already correct then just return if (bamTemplate != null && bamTemplate.AssetTag == asset.Audit_Part_Num) { return; } else if (bamTemplate != null) { newHardwareAsset = CloneObject.Clone(bamTemplate); } else { newHardwareAsset = CreateNewItem(asset); } newHardwareAsset = _hardwareAssetService.SetAssetTag(newHardwareAsset, asset.Audit_Part_Num); _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate); // Check Update was successful var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault(); if (updatedbamTemplate?.AssetTag != asset.Audit_Part_Num) { _reportings.Add(new BAM_ReportingBsm() { ServiceProgressReportId = serviceProgressReport.Id, SerialNumber = asset.SerialNumber, AssetStatus = EST_HWAssetStatus.AssetTagChanged, SCAudit_Item = asset, BAM_HardwareTemplate_Exception = updatedbamTemplate, ExceptionMessage = "Failed to Update" }); returnList.Add(asset); } }); model.AssetTagChangeList = returnList; return(model); }
static void Main(string[] args) { Pessoa pesoa1 = new Pessoa(); pesoa1.Id = 1234; pesoa1.Nome = "João"; pesoa1.UsaOculos = true; Pessoa pessoa2 = new Pessoa(); CloneObject.CopyValues <Pessoa>(pessoa2, pesoa1); Console.ReadKey(); }
public HardwareTemplate_Full SetHardwareAssetPrimaryUser(HardwareTemplate_Full template, string userName) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.OwnedBy = new OwnedBy { BaseId = _userService.UserList.FirstOrDefault(x => x.Name == userName).Id }; return(newHardwareAsset); }
public HardwareTemplate_Full SetUser(HardwareTemplate_Full template, BAM_User user) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); newHardwareAsset.OwnedBy = new OwnedBy { BaseId = user.Id }; return(newHardwareAsset); }
public async Task B03_Update_Basic() { var serialNumber = "CNU0183F33"; Guid.TryParse("acdcedb7-100c-8c91-d664-4629a218bd94", out var objectStatusId); var updateAssetStatus = EST_HWAssetStatus.Retired; var originalModifiedDate = new DateTime(); var updatedModifiedDate = new DateTime(); var hardwareAssetService = new BAM_HardwareAssetServices(); var result = hardwareAssetService.GetHardwareAsset(serialNumber); var originalhardwareAsset = result.First(); originalModifiedDate = (DateTime)originalhardwareAsset.LastModified; var newHardwareAsset = CloneObject.Clone(originalhardwareAsset); // hardwareAssetService.SetHardwareAssetStatus(originalhardwareAsset, updateAssetStatus); newHardwareAsset.AssetTag = "Hugh Test"; //newHardwareAsset.BaseId = null; //newHardwareAsset.TimeAdded = newHardwareAsset.ObjectStatus = new ObjectStatus() { Id = objectStatusId.ToString() }; //newHardwareAsset.LastModified = DateTime.Now; List <HardwareTemplate> hardwareAssetList = new List <HardwareTemplate>(); hardwareAssetList = hardwareAssetService.UpdateTemplate(newHardwareAsset, originalhardwareAsset); Assert.IsNotNull(hardwareAssetList, "Return list is null"); Assert.IsTrue(hardwareAssetList.Count > 1, "Return list doesn't include 2 records"); var updatedHardwareAsset = hardwareAssetService.GetHardwareAsset(serialNumber).FirstOrDefault(); Assert.IsNotNull(updatedHardwareAsset, "Updated Asset is null"); Assert.IsTrue(updatedHardwareAsset.SerialNumber == serialNumber, "SerialNumbers don't match"); updatedModifiedDate = (DateTime)updatedHardwareAsset.LastModified; Assert.IsTrue(updatedModifiedDate != originalModifiedDate, "Original and Updated LastModified Date are the same"); Assert.IsTrue(updatedModifiedDate > originalModifiedDate, "Updated LastModified Date is not greater that the Original"); }
public HardwareTemplate_Full SetLocation(HardwareTemplate_Full template, string siteLocation) { if (template == null) { throw new Exception("Template must not be null"); } // Clone the object so we can check the changes var newHardwareAsset = CloneObject.Clone(template); //if (siteLocation == "Esteem" || siteLocation == "LTX") //{ newHardwareAsset.Target_HardwareAssetHasLocation = new TargetHardwareAssetHasLocation { BaseId = "ae7423eb-0952-d69c-4d7d-77f1699bfe92", }; //} return(newHardwareAsset); }
public Response <UserModel> Update(int id, EditUserModel _) { var entryUser = _repository.GetUserByUsername(_contextAccessor.HttpContext.User?.Identity?.Name); var user = _repository.GetUserById(id); if (user == null) { _saveLog.LogInformation("Failed to Update User because user with Id=\"" + id + "\" does not exist"); return(new Response <UserModel>(PublicResultStatusCodes.ModelIsNotValid)); } var beforeUser = CloneObject.Clone(user); if (!string.IsNullOrWhiteSpace(_.Password)) { var hashHelper = new HashHelper(_.Password); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; } user.Account = _.Account; user.First = _.First; user.Last = _.Last; user.IsActive = _.IsActive; user.ExpireDate = _.ExprieDate; user.IDRole = _.IdRole; user.EmailAddress = _.EmailAddress; user.IDUserAuthorizationType = _.IdUserAuthorizationType; //user.WithUserAuthorization = _.WithUserAuthorization; // user.SerialNumber = _.SerialNumber; //user.IdEmployee = _.IdEmployee; EntryUpdateUserHelper.FillUpdateData(ref user); var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(beforeUser, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <UserModel>(PublicResultStatusCodes.Done)); }
private void buttonLoadFromFile_Click(object sender, EventArgs e) { string line; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Text files | *.txt"; dialog.Multiselect = false; if (dialog.ShowDialog() == DialogResult.OK) { String path = dialog.FileName; using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open), new UTF8Encoding())) { while ((line = reader.ReadLine()) != null) { string[] bits = line.Split(' '); var priorityString = "0"; int duration = Int32.Parse(bits[1]); int arrivalTime = Int32.Parse(bits[0]); int priority = Int32.Parse(priorityString); int burstTime = Int32.Parse(bits[2]); int ioTime = Int32.Parse(bits[3]); if (ioTime == 0) { burstTime = duration; bits[2] = bits[1]; } Process newProcess = new Process(Global.Scheduler.ProcessesList.Count + 1, duration, arrivalTime, priority, burstTime, ioTime); Global.Scheduler.ProcessesList.Add(newProcess); Global.ProcessesInList.Add(CloneObject.CloneJson(newProcess)); Input.AddProcessToTable(dataGridViewProcessesList, newProcess.Id, bits[1], bits[0], priorityString, bits[2], bits[3]); } reader.Close(); } } }
public Response <object> ChangePassword(AdminChangePasswordModel _) { var user = _repository.GetUserById(_.IdUser); var userBefore = CloneObject.Clone(user); //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount) //{ // _saveLog.LogInformation("User with Active Directory cannot change password from this system!"); // return new Response<object>(PublicResultStatusCodes.NotAllowedOperation); //} var hashHelper = new HashHelper(_.NewPassword); user.Password = hashHelper.Hash; user.SaltedPassword = hashHelper.Salt; user.LatestPasswordChangeDate = DateTime.Now; var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user); _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2); return(new Response <object>(PublicResultStatusCodes.Done)); }
//Add new process inside our table (list) and Scheduler memory private void buttonInput_Click(object sender, EventArgs e) { var durationString = textBoxDuration.Text; var arrivalTimeString = textBoxArrivalTime.Text; var priorityString = "0"; //var priorityString = textBoxPriority.Text; var burstTimeString = textBoxBurstTime.Text; var ioTimeString = textBoxIOTime.Text; string inputErrors = Input.CheckInputErrors(durationString, arrivalTimeString, priorityString, burstTimeString, ioTimeString); if (!String.IsNullOrEmpty(inputErrors)) { MessageBox.Show(inputErrors); } else { int duration = Int32.Parse(durationString); int arrivalTime = Int32.Parse(arrivalTimeString); int priority = Int32.Parse(priorityString); int burstTime = Int32.Parse(burstTimeString); int ioTime = Int32.Parse(ioTimeString); if (ioTime == 0) { burstTime = duration; burstTimeString = durationString; } Process newProcess = new Process(Global.Scheduler.ProcessesList.Count + 1, duration, arrivalTime, priority, burstTime, ioTime); Global.Scheduler.ProcessesList.Add(newProcess); Global.ProcessesInList.Add(CloneObject.CloneJson(newProcess)); Input.AddProcessToTable(dataGridViewProcessesList, newProcess.Id, durationString, arrivalTimeString, priorityString, burstTimeString, ioTimeString); } }
private void buttonStartSimulation_Click(object sender, EventArgs e) { if (Global.Scheduler.ProcessesList.Count == 0) { MessageBox.Show("Insert at least one process before starting the simulation."); } else { if (radioButtonFCFS.Checked) { Global.Scheduler = new Scheduler(); if (Global.ProcessesInList.Count > 0) { Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList); } Global.Scheduler.Algorithm = SchedulerAlgorithm.FCFS; Global.Scheduler.solveFCFS(); Global.Scheduler.ComputeData(); buttonGanttChart.Visible = true; } else if (radioButtonSJF.Checked) { Global.Scheduler = new Scheduler(); if (Global.ProcessesInList.Count > 0) { Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList); } Global.Scheduler.Algorithm = SchedulerAlgorithm.SJF; Global.Scheduler.solveSJF(); Global.Scheduler.ComputeData(); buttonGanttChart.Visible = true; } else if (radioButtonBoth.Checked) { //FCFS Global.Scheduler = new Scheduler(); if (Global.ProcessesInList.Count > 0) { Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList); } Global.Scheduler.Algorithm = SchedulerAlgorithm.FCFS; Global.Scheduler.solveFCFS(); Global.Scheduler.ComputeData(); cpuChart.Series["Average Response Time"].Points.AddY(Global.Scheduler.AverageResponseTime); cpuChart.Series["Average Waiting Time"].Points.AddY(Global.Scheduler.AverageWaitingTime); cpuChart.Series["Average Turnaround Time"].Points.AddY(Global.Scheduler.AverageTurnaroundTime); cpuChart.Series["Average CPU Utilisation"].Points.AddY(Global.Scheduler.AverageCPUUtilisation); cpuChart.Series["Average No of Waiting Processes"].Points.AddY(Global.Scheduler.AverageWaitingProcesses); //SJF Global.Scheduler = new Scheduler(); if (Global.ProcessesInList.Count > 0) { Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList); } Global.Scheduler.Algorithm = SchedulerAlgorithm.SJF; Global.Scheduler.solveSJF(); Global.Scheduler.ComputeData(); buttonGanttChart.Visible = false; } cpuChart.Series["Average Response Time"].Points.AddY(Global.Scheduler.AverageResponseTime); cpuChart.Series["Average Waiting Time"].Points.AddY(Global.Scheduler.AverageWaitingTime); cpuChart.Series["Average Turnaround Time"].Points.AddY(Global.Scheduler.AverageTurnaroundTime); cpuChart.Series["Average CPU Utilisation"].Points.AddY(Global.Scheduler.AverageCPUUtilisation); cpuChart.Series["Average No of Waiting Processes"].Points.AddY(Global.Scheduler.AverageWaitingProcesses); } }
/// <summary> /// 将考勤记录导入数据库. /// </summary> /// <param name="xlsFilePath"></param> /// <param name="randomStr"></param> /// <param name="pb"></param> /// <returns></returns> public static MSG ImportAttendanceRecordToDB(string xlsFilePath, string randomStr, BackgroundWorker bgWork) { string excelName = Usual_Excel_Helper.getExcelName(xlsFilePath); bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0},准备读取:", excelName)); int pbLength = 0; bgWork.ReportProgress(pbLength, "pb.Maximum"); int pbValue = 0; bgWork.ReportProgress(pbValue, "pb.Value"); MSG msg = new MSG(); //用于确定本月最后一天. Stack <int> sDate = new Stack <int>(); //Queue<AttendanceR> qAttendanceR = new Queue<AttendanceR>(); Queue <AttendanceRecordDetail> qARDetail = new Queue <AttendanceRecordDetail>(); AttendanceRecordDetail._random_str = randomStr; //按指纹日期 string fingerPrintDate = String.Empty; //行最大值. int rowsMaxCount = 0; int colsMaxCount = 0; Usual_Excel_Helper uEHelper = null; MyExcel myExcel = new MyExcel(xlsFilePath); //打开该文档。 myExcel.openWithoutAlerts(); //只获取第一个表格。 Worksheet ws = myExcel.getFirstWorkSheetAfterOpen(); bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0},正在读取:", excelName)); AttendanceRecordDetail._file_path = xlsFilePath; //行;列最大值 赋值. rowsMaxCount = ws.UsedRange.Rows.Count; colsMaxCount = ws.UsedRange.Columns.Count; AttendanceRecordDetail._sheet_name = ws.Name; //判断首行是否为 考勤记录表;以此判断此表是否为考勤记录表. string A1Str = ((Range)ws.Cells[1, 1]).Text.ToString().Trim().Replace("\n", "").Replace("\r", "").Replace(" ", ""); if (String.IsNullOrEmpty(A1Str)) { msg.Msg = "工作表的A1单元格不能为空!"; msg.Flag = false; myExcel.close(); return(msg); } //如果A1Str的内容不包含"考勤记录表"5个字。 if (!A1Str.Contains("考勤记录表")) { msg.Msg = "A1内容未包含'考勤记录表'"; msg.Flag = false; myExcel.close(); return(msg); } #region 判断名称中是否区分了考勤记录。 string Seq_Attendance_Record = string.Empty; int indexOfFullStop = xlsFilePath.LastIndexOf("."); Seq_Attendance_Record = xlsFilePath.Substring(indexOfFullStop - 1, 1); if (!CheckPattern.CheckNumber(Seq_Attendance_Record)) { msg.Msg = "考勤记录表名称请以数字结尾!"; msg.Flag = false; myExcel.close(); return(msg); } #endregion AttendanceRecordDetail._prefix_Job_Number = excelName.Substring(excelName.Length - 1, 1).ToCharArray()[0]; string C3Str = ((Range)ws.Cells[3, 3]).Text.ToString().Trim(); // \0: 表空字符. if (String.IsNullOrEmpty(C3Str)) { msg.Msg = "异常: 考勤时间为空!"; msg.Flag = false; myExcel.close(); return(msg); } // string[] ArrayC3 = C3Str.Split('~'); if (ArrayC3.Length == 0) { msg.Msg = "异常: 考勤时间格式变更!"; msg.Flag = false; myExcel.close(); return(msg); } AttendanceRecordDetail._start_date = ArrayC3[0].ToString().Trim().Replace('/', '-'); AttendanceRecordDetail._end_date = ArrayC3[1].ToString().Trim().Replace('/', '-'); //制表时间: L3 3行12列. string L3Str = ((Range)ws.Cells[3, 12]).Text.ToString().Trim().Replace('/', '-'); if (String.IsNullOrEmpty(L3Str)) { msg.Msg = "异常: 制表时间为空!"; msg.Flag = false; myExcel.close(); return(msg); } //制表时间. AttendanceRecordDetail._tabulation_time = L3Str; //检查第4行是否为;考勤时间: string A4Str = ((Range)ws.Cells[4, 1]).Text.ToString().Trim(); if (!"1".Equals(A4Str, StringComparison.CurrentCultureIgnoreCase)) { msg.Msg = "异常: 第四行已变更!"; msg.Flag = false; myExcel.close(); return(msg); } uEHelper = new Usual_Excel_Helper(ws); //此刻不能删除,只是获取行号。 Queue <Range> rangeToDelQueue = new Queue <Range>(); //判断是否有空行。 for (int i = 5; i <= rowsMaxCount; i++) { if (uEHelper.isBlankRow(i)) { //只要上一列不是 //删除掉此行。 //判断上一行中的A列是否为工号。 string temp = uEHelper.getSpecificCellValue("A" + (i - 1).ToString()); if ("工号:".Equals(temp)) { //本行为空,上一行为工号行,则也统计。 continue; } //本行,为空,上一行非工号行。则删除本行。 Range rangeToDel = (Microsoft.Office.Interop.Excel.Range)uEHelper.WS.Rows[i, System.Type.Missing]; //不为工号 rangeToDelQueue.Enqueue(rangeToDel); } ; } Range rangeToDelete; //开始删除空行。 while (rangeToDelQueue.Count > 0) { rangeToDelete = rangeToDelQueue.Dequeue(); rangeToDelete.Delete(XlDeleteShiftDirection.xlShiftUp); } ; rowsMaxCount = ws.UsedRange.Rows.Count; //进度条长度增加。 pbLength += colsMaxCount; pbLength += (colsMaxCount * (rowsMaxCount - 5 + 1)); bgWork.ReportProgress(pbLength, "pb.Maximum"); //入队列值0 sDate.Push(0); //显示进度条。 //考勤表中第4行,某月的最大考勤天数。 //lblPrompt.Text = excelName + ",正在读取:"; int actualMaxDay = 0; //开始循环 for (int i = 1; i <= colsMaxCount; i++) { A4Str = ((Range)ws.Cells[4, i]).Text.ToString(); //碰到第4行某列为空,退出循环。 if (String.IsNullOrEmpty(A4Str)) { break; } int aDate = 0; //对A4Str进行分析. if (!Int32.TryParse(A4Str, out aDate)) { msg.Msg = String.Format(@"异常: 考勤日期行第{0}列出现非数字内容!", aDate); msg.Flag = false; myExcel.close(); return(msg); } //判断新增的日期是否大于上一个. if (aDate <= sDate.Peek()) { //跳出循环. break; } actualMaxDay++; sDate.Push(aDate); //pb.Value++; bgWork.ReportProgress(pbValue++, "pb.Value"); } //取其中的最小值。 colsMaxCount = Math.Min(sDate.Count - 1, actualMaxDay); //考勤日期 fingerPrintDate = AttendanceRecordDetail._start_date.Substring(0, 7).Replace('/', '-'); string tempStr = string.Empty; //开始循环 for (int colIndex = 1; colIndex <= colsMaxCount; colIndex++) { //从第5行开始. //奇数;偶数行共用一个对象. AttendanceRecordDetail ARDetail = null; //设定用于填充的对象 AttendanceRecordDetail._prefix_Job_Number = Seq_Attendance_Record.ToCharArray()[0]; for (int rowIndex = 5; rowIndex <= rowsMaxCount; rowIndex++) { //如果行数为奇数则为工号行. if (rowIndex % 2 == 1) { //工号行. //取工号 ARDetail = new AttendanceRecordDetail(); ARDetail.Job_number = ((Range)ws.Cells[rowIndex, 3]).Text.ToString().Trim(); //自行拼凑AR. ARDetail.combine_Job_Number(); //取姓名: K5 ARDetail.Name = ((Range)ws.Cells[rowIndex, Usual_Excel_Helper.getColIndexByStr("K")]).Text.ToString().Trim(); //取部门: U5 ARDetail.Dept = ((Range)ws.Cells[rowIndex, Usual_Excel_Helper.getColIndexByStr("U")]).Text.ToString().Trim(); //部门为空,则填充为NULL; ARDetail.Dept = !String.IsNullOrEmpty(ARDetail.Dept) ? ARDetail.Dept : "NULL"; //取日期.填充0; ARDetail.Fingerprint_date = fingerPrintDate + "-" + colIndex.ToString().PadLeft(2, '0'); } else { //偶数行取考勤结果. //上班时间. 如B10; tempStr = ((Range)ws.Cells[rowIndex, colIndex]).Text.ToString().Trim(); string tempFirstTime = String.Empty; string tempLastTime = String.Empty; List <string> strTimeList = null; msg = getFPTimeReturnMSG(tempStr, out strTimeList); if (!msg.Flag) { msg.Msg = string.Format(@"导入失败,提交数据尚未开始:第{0}行{1}列,{1}!", rowIndex, colIndex, msg.Msg); myExcel.close(); return(msg); } ; //无打卡记录,不提交 if (strTimeList.Count == 0) { qARDetail.Enqueue(ARDetail); } //有打卡记录 for (int i = 0; i < strTimeList.Count; i++) { AttendanceRecordDetail ARDetailTemp = (AttendanceRecordDetail)CloneObject.Clone(ARDetail); ARDetailTemp.Finger_print_time = ARDetailTemp.Fingerprint_date + " " + strTimeList[i].ToString(); qARDetail.Enqueue(ARDetailTemp); } } //pb.Value++; bgWork.ReportProgress(pbValue++, "pb.Value"); } } //释放对象 myExcel.close(); System.Threading.Thread.Sleep(2000); GC.Collect(); GC.WaitForPendingFinalizers(); //lblResult.Text = ""; bgWork.ReportProgress(0, "lblResult.Text = ''"); //lblPrompt.Text = "提交数据: "; bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0}, 提交数据:", excelName)); // bgWork.ReportProgress(qARDetail.Count, "pb.Maximum"); //*******/ pbValue = 0; bgWork.ReportProgress(pbValue, "pb.Value"); #region //OracleDaoHelper.noLogging("Attendance_Record"); OracleDaoHelper.noLogging("Attendance_Record_Detail"); OracleConnection conn = OracleConnHelper.getConn(); OracleTransaction tran = conn.BeginTransaction(); //保存对象 while (qARDetail.Count > 0) { try { AttendanceRecordDetail aRDetail = qARDetail.Dequeue(); affectedCount += aRDetail.saveBySpecificConn(conn); //pb.Value++; bgWork.ReportProgress(pbValue++, "pb.Value"); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Msg = DirectoryHelper.getFileName(xlsFilePath) + ":导入失败; " + ex.ToString(); msg.Flag = false; tran.Rollback(); conn.Close(); conn.Dispose(); return(msg); throw; } } tran.Commit(); conn.Close(); conn.Dispose(); #endregion //OracleDaoHelper.logging("Attendance_Record"); OracleDaoHelper.logging("Attendance_Record_Detail"); msg.Flag = true; msg.Msg = String.Format(@"导入完成;总计{0}条.", affectedCount.ToString()); return(msg); }
private void SetInitialValues() { ModifiedOrder = CloneObject.CloneObjectSerializable <OrderModel>(Order); RemovedOrderProducts = new List <OrderProductModel>(); // Order info OrderIdValue.Text = Order.Id.ToString(); OrderDateValue.Text = Order.DateTimeOfTheOrder.ToString(); StaffNameValue.Text = Order.Staff.Person.FullName; StoreNameValue.Text = Order.Store.Name; CustomerNameValue.Text = Order.Customer.Person.FullName; OrderTotalPriceValue.Value = Order.GetTotalPrice; TotalPriceAfterChangesValue.Value = Order.GetTotalPrice; TotalProfitValue.Value = Order.GetTotalProfit; TotalProfitAfterChangesValue.Value = Order.GetTotalProfit; OrderDetailsValue.Text = Order.Details; // Order Payments OrderPaymentsList.ItemsSource = null; OrderPaymentsList.ItemsSource = Order.OrderPayments; OrderProductList.ItemsSource = null; OrderProductList.ItemsSource = ModifiedOrder.OrderProducts; RemovedOrderProductList.ItemsSource = null; RemovedOrderProductList.ItemsSource = RemovedOrderProducts; SelectedOrderProductQuantityValue.Value = 0; TotalPaidValue.Value = Order.GetTotalPaid; ShoppeeWalletValue.Value = PublicVariables.Store.GetShopeeWallet; if (ModifiedOrder.GetOrderState == "DONE") { CustomerShouldPayValue.Value = 0; CustomerShouldReceiveValue.Value = 0; StoreWillPayNowValue.Value = 0; StoreWillPayLaterValue.Value = 0; CustomerWillPayNowValue.Value = 0; CustomerWillPayLaterValue.Value = 0; } else if (ModifiedOrder.GetOrderState == "Customer Should Pay") { CustomerShouldPayValue.Value = ModifiedOrder.GetTotalNotPaid; CustomerShouldReceiveValue.Value = 0; CustomerWillPayNowValue.Value = ModifiedOrder.GetTotalNotPaid; CustomerWillPayLaterValue.Value = 0; StoreWillPayNowValue.Value = 0; StoreWillPayLaterValue.Value = 0; } else if (ModifiedOrder.GetOrderState == "Customer Should Receive") { CustomerShouldPayValue.Value = 0; CustomerShouldReceiveValue.Value = ModifiedOrder.GetCustomerShouldReceive; StoreWillPayNowValue.Value = ModifiedOrder.GetCustomerShouldReceive; StoreWillPayLaterValue.Value = 0; CustomerWillPayNowValue.Value = 0; CustomerWillPayLaterValue.Value = 0; } else { CustomerShouldPayValue.Value = 0; CustomerShouldReceiveValue.Value = 0; } }
private void Print_Click(object sender, RoutedEventArgs e) { //If you reduce the size of the view area of the window, so the text does not all fit into one page, it will print separate pages string str = " If you reduce the size of the view area of the window, so \nthe text does not all fit into one page, it will print separate pages "; List <string> PrinterList = new List <string>(); /*******************************/ //printicket PrintTicket ticket = new PrintTicket(); ticket.PageMediaSize = new PageMediaSize(100, 100); ticket.PageOrientation = PageOrientation.Portrait; ticket.PageOrder = PageOrder.Standard; LocalPrintServer prntserver = new LocalPrintServer(); PrintQueueCollection queueCollection = prntserver.GetPrintQueues(); PrintDialog printDialog = new PrintDialog(); foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters) { PrinterList.Add(printer); //MessageBox.Show(printer); } PageRange pr = new PageRange(1, 3); string[] tempPrint = PrinterList.ToArray(); string printFullName = printDialog.PrintQueue.FullName; printDialog.PrintQueue = prntserver.GetPrintQueue(PrinterList[0]); printDialog.PrintTicket = ticket; printDialog.PageRange = pr; //DocumentPaginator paginatro = new DocumentPaginator(); /***************************************************************/ // add exptra pages FixedPage page = new FixedPage(); FixedDocument Doc = new FixedDocument(); //if(printDialog.ShowDialog() == true) //printDialog.PrintDocument(((IDocumentPaginatorSource)flowDocument).DocumentPaginator, str + "This is a Flow Document"); string NewSelectedPrinter = printDialog.PrintQueue.FullName; /*****************new code*********************/ // select printer and get printer settings PrintDialog pd = new PrintDialog(); //if (pd.ShowDialog() != true) return; //Create a document double width = 400; double height = 600; FixedDocument fxDoc = new FixedDocument(); fxDoc.DocumentPaginator.PageSize = new Size(width, height); // Create fixed page1 //FixedPage page1 = new FixedPage(); //page1.Width = width; //page1.Height = height; //// Create fixed page2 //FixedPage page2 = new FixedPage(); //page2.Width = width; //page2.Height = height; ////Add some text1 TextBlock tx1 = new TextBlock(); //tx1.Width = width; //tx1.FontSize = 12; //tx1.Text = " Page1 And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document."; //tx1.TextAlignment = TextAlignment.Justify; //tx1.TextWrapping = TextWrapping.Wrap; //page1.Children.Add(tx1); ////Add some text2 //tx1 = new TextBlock(); //tx1.Width = width; //tx1.FontSize = 20; //tx1.Text = " Page 2 And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document."; //tx1.TextAlignment = TextAlignment.Justify; //tx1.TextWrapping = TextWrapping.Wrap; //page2.Children.Add(tx1); // add page to document bye PageContent object //PageContent pgCont = new PageContent(); //pgCont.Child = page1; //fxDoc.Pages.Add(pgCont); //pgCont = new PageContent(); //pgCont.Child = page2; //fxDoc.Pages.Add(pgCont); FixedPage page1; Grid grd1; TextBlock tx2; fxDoc = new FixedDocument(); FixedDocument fixDocument2 = new FixedDocument(); PageContent pgCont = new PageContent(); Grid grd; FixedPage[] pageCollection = new FixedPage[10]; //List<FixedPage> listPageCollection = new List<FixedPage>(); for (int i = 0; i < 8; i++) { //CreatePage page = new FixedPage(); page.Name = "Page" + i; page.Width = width; page.Height = height; /***********(2)*************/ page1 = new FixedPage(); page1.Name = "Page" + i; page1.Width = width; page1.Height = height; //Add text to Page. grd = new Grid(); grd.Width = width; /*******(2)**********/ grd1 = new Grid(); grd1.Width = width; //Grid RowDefinition row = new RowDefinition(); grd.RowDefinitions.Add(row); row = new RowDefinition(); grd.RowDefinitions.Add(row); /************(2)******************/ RowDefinition row1 = new RowDefinition(); grd1.RowDefinitions.Add(row1); row1 = new RowDefinition(); grd1.RowDefinitions.Add(row1); //Header TextBlock tx1 = new TextBlock(); tx1.Width = width; tx1.FontSize = 20; tx1.Text = "Page Index " + i; tx1.TextAlignment = TextAlignment.Center; //tx1.TextWrapping = TextWrapping.Wrap; Grid.SetRow(tx1, 0); grd.Children.Add(tx1); /***********(2)**************/ //Header TextBlock tx2 = new TextBlock(); tx2.Width = width; tx2.FontSize = 20; tx2.Text = "Page Index " + i; tx2.TextAlignment = TextAlignment.Center; //tx1.TextWrapping = TextWrapping.Wrap; Grid.SetRow(tx2, 0); grd1.Children.Add(tx2); //Paragraph tx1 = new TextBlock(); tx1.Width = width; tx1.FontSize = 14; tx1.Text = "Page " + i + " And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document."; tx1.TextAlignment = TextAlignment.Justify; tx1.TextWrapping = TextWrapping.Wrap; Grid.SetRow(tx1, 1); grd.Children.Add(tx1); /**************(2)*********************/ //Paragraph tx2 = new TextBlock(); tx2.Width = width; tx2.FontSize = 14; tx2.Text = "Page " + i + " And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document."; tx2.TextAlignment = TextAlignment.Justify; tx2.TextWrapping = TextWrapping.Wrap; Grid.SetRow(tx2, 1); grd1.Children.Add(tx2); page.Children.Add(grd); //Add text to pagecontent page1.Children.Add(grd1); CloneObject c1 = new CloneObject(); pageCollection[i] = (FixedPage)c1.DeepCopy(); pgCont = new PageContent(); pgCont.Child = page; fxDoc.Pages.Add(pgCont); } ticket = new PrintTicket(); ticket.PageMediaSize = new PageMediaSize(width, height); ticket.PageOrientation = PageOrientation.Portrait; //ticket.PagesPerSheet = 2; pd.PrintTicket = ticket; pd.PrintDocument(fxDoc.DocumentPaginator, "My First Document"); /*****************Print According to Index************************************/ pgCont = new PageContent(); //pgCont= fxDoc.Pages[4]; page = new FixedPage(); page = pageCollection[3]; pgCont.Child = page; fxDoc = new FixedDocument(); fxDoc.Pages.Add(pgCont); ticket = new PrintTicket(); ticket.PageMediaSize = new PageMediaSize(width, height); ticket.PageOrientation = PageOrientation.Portrait; //ticket.PagesPerSheet = 2; pd.PrintTicket = ticket; pd.PrintDocument(fxDoc.DocumentPaginator, "My First Document"); /*****************************Cloning of Object******************************************************/ }
public CloneContext(CloneObject cloneObject) { _cloneObject = cloneObject; }
protected CloneTests(bool useEmit) { Monitor.Enter(_lock); CloneObjectEx.UseEmit = useEmit; _factory = Cloning.Clone.DefaultCloneObject(); }
public object Clone() { return(CloneObject.Clone(this)); }
//SJF = Shortest Job First public void solveSJF() { CurrentTime = 0; Status = SchedulerStatus.On; ProcessesQueue = ProcessesList; //Queue Starts with ascending order of processes by Arrival Time. ProcessesQueue = ProcessesQueue.OrderBy(c => c.ArrivalTime).ThenBy(c => c.BurstTime).ToList(); //Load first Process while (ProcessesQueue[0].ArrivalTime > CurrentTime) { KeyTime keyTime = new KeyTime(); keyTime.CpuOnLoad = false; keyTime.Process = null; keyTime.OngoingProcess = null; keyTime.OutgoingProcess = null; keyTime.Timestamp = CurrentTime; ++CurrentTime; KeyTimes.Add(keyTime); } //First process comes at moment zero (special scenario) if (CurrentTime == 0 && ProcessesQueue[0].ArrivalTime == 0) { Process firstProcess = ProcessesQueue[0]; ProcessesQueue.RemoveAt(0); //Remove selected process from the queue KeyTime keyTime = new KeyTime(); keyTime.CpuOnLoad = true; keyTime.OutgoingProcess = null; keyTime.Timestamp = CurrentTime; firstProcess.LastEnterTime = CurrentTime; firstProcess.Status = ProcessStatus.OnCpu; keyTime.OngoingProcess = firstProcess; KeyTimes.Add(keyTime); ++CurrentTime; } //Continue processing KeyTime currentKeyTime = new KeyTime(); KeyTime lastKeyTime = KeyTimes[CurrentTime - 1]; while (ProcessesQueue.Count > 0 || lastKeyTime.OngoingProcess != null || currentKeyTime.OngoingProcess != null) { currentKeyTime = new KeyTime(); lastKeyTime = KeyTimes[CurrentTime - 1]; currentKeyTime.Timestamp = CurrentTime; //Last process action on current moment var lastOngoingProcessResult = CheckForProcessContinuity(CloneObject.CloneJson(lastKeyTime.OngoingProcess)); //Process ongoing on the CPU. No replacements actions needed if (lastOngoingProcessResult != null && lastOngoingProcessResult.Item2 != null) { currentKeyTime.OutgoingProcess = null; currentKeyTime.OngoingProcess = lastOngoingProcessResult.Item2; currentKeyTime.CpuOnLoad = true; if (currentKeyTime.OngoingProcess.ResponseTime == 0) { currentKeyTime.OngoingProcess.ResponseTime = CurrentTime; } ++AverageCPUUtilisation; } else { if (lastOngoingProcessResult != null) { currentKeyTime.OutgoingProcess = lastOngoingProcessResult.Item1; } currentKeyTime.OngoingProcess = TryLoadProcessFromQueue(); if (currentKeyTime.OngoingProcess != null) { ++AverageCPUUtilisation; if (currentKeyTime.OngoingProcess.ResponseTime == 0) { currentKeyTime.OngoingProcess.ResponseTime = CurrentTime; } } } KeyTimes.Add(currentKeyTime); AverageWaitingProcesses += ProcessesQueue.Count; ++CurrentTime; } Status = SchedulerStatus.Off; }