/// <summary> /// Manage compartment status by requested object and based on locker configuration. /// </summary> /// <returns> /// List of compartment status object mapped from locker configuration. /// </returns> public static List <Entities.Locker.Compartment> CompartmentStatus(DataObjects.Models.Compartment model, AppSettings lockerConfiguration) { // Find object detection module id list by input list of compartment var compartments = CompartmentService.CompartmentStatus(model, lockerConfiguration); return(compartments); }
/// <summary> /// Manage open compartment by requested object and based on locker configuration. /// </summary> /// <returns> /// The compartment object mapped from locker configuration. /// </returns> public static Locker CompartmentOpen(DataObjects.Models.Compartment model, AppSettings lockerConfiguration) { var odbModuleList = new List <string> { }; // Find object detection module id list by input list of compartment List <CompartmentConfiguration> compartments = lockerConfiguration.Locker.Compartments; if (model.CompartmentIds.Any(CompartmentId => CompartmentId == "All")) { model.CompartmentIds = lockerConfiguration.Locker.Compartments.Select(compartment => compartment.CompartmentId).ToArray(); } foreach (var compartmentId in model.CompartmentIds) { var compartment = compartments.Find(c => c.CompartmentId == compartmentId); if (!odbModuleList.Contains(compartment.CompartmentCode.Odbmod)) // Get object detection module id { odbModuleList.Add(compartment.CompartmentCode.Odbmod); } } // Update object detection status of selected modules var objectdetectStatusAry = new Dictionary <string, Dictionary <string, byte> > { }; foreach (string moduleNo in odbModuleList) { objectdetectStatusAry[moduleNo] = CompartmentHelper.GetStatusByModuleId(CommandType.ItemDetection, moduleNo, lockerConfiguration); Log.Debug("[HCM][Compartment Manager][Compartment Open]" + "[Module No : " + moduleNo + "]" + "[Object Detection Status Array : " + objectdetectStatusAry[moduleNo] + "]"); } var result = new Locker(); bool compartmentDoorStatusAlert = false; foreach (var compartmentId in model.CompartmentIds) { var targetCompartment = CompartmentService.CompartmentOpen(compartmentId, lockerConfiguration); // Update objectdetection status CompartmentConfiguration targetCompartmentConfig = CompartmentHelper.MapCompartment(compartmentId, lockerConfiguration); Dictionary <string, byte> objectdetectStatus = objectdetectStatusAry[targetCompartmentConfig.CompartmentCode.Odbmod]; targetCompartment.ObjectDetected = objectdetectStatus[targetCompartmentConfig.CompartmentCode.Odbid] == 1 ? true : false; result.Compartments.Add(targetCompartment); compartmentDoorStatusAlert |= targetCompartment.CompartmentDoorOpen; } result.TransactionId = model.TransactionId; // Set alert timer if (compartmentDoorStatusAlert) { Log.Information("[HCM][Compartment Manager][Compartment Open]" + "[Set Door Open Timer]"); CompartmentHelper.SetDoorOpenTimer(lockerConfiguration); //CompartmentHelper.EndDoorOpenTimer(); } return(result); }