예제 #1
0
 public void Statistics_DailyGather(string PKID, DateTime start, DateTime end)
 {
     try
     {
         IParking        iparking = ParkingFactory.GetFactory();
         string          strerror = string.Empty;
         var             parking  = iparking.QueryParkingByParkingID(PKID);
         List <ParkGate> gatelist = ParkGateServices.QueryByParkingId(PKID);
         try
         {
             var p = iparking.QueryParkingByParkingID(PKID);
             new DailyGatherServices().Statistics_DailyByHour(p, start, end);
         }
         catch (Exception ex)
         {
             Common.Services.TxtLogServices.WriteTxtLog("按时统计异常 异常信息:{0}", ex.Message);
         }
         //按通道统计时数据
         try
         {
             new GateGatherServices().Statistics_DailyByGate(gatelist, parking, start, end);
         }
         catch (Exception ex)
         {
             Common.Services.TxtLogServices.WriteTxtLog("按通道统计异常 异常信息:{0}", ex.Message);
         }
     }
     catch (Exception ex)
     {
         Common.Services.TxtLogServices.WriteTxtLog("按日统计异常 异常信息:{0}", ex.Message);
     }
 }
예제 #2
0
        private void HandleOnParkingsRefreshed(IApiResult <List <IParking> > apiResult)
        {
            if (apiResult.Error)
            {
                return;
            }

            var parking = apiResult.Result.SingleOrDefault(p => p.Id == Parking.Id);

            if (parking == null)
            {
                return;
            }

            if (parking.LastUpdateDate == Parking.LastUpdateDate)
            {
                return;
            }

            var parkingViewModel = BindingContext as ParkingViewModel;

            if (parkingViewModel == null)
            {
                return;
            }

            parkingViewModel.Update(parking);
            UpdateFreePlacesCountColorText(parkingViewModel);

            Parking = parking;
        }
예제 #3
0
 private async Task AssignClassVariables(int daysToAddInAdvance, IParking parkingManager, IParkingDetailsOnDate parkingDetailsManager, IParkingManagement parkingManagementManager)
 {
     _parkingManager           = parkingManager;
     _parkingDetailsManager    = parkingDetailsManager;
     _parkingManagementManager = parkingManagementManager;
     this.daysToAddInAdvance   = daysToAddInAdvance;
 }
예제 #4
0
 public ManageParkingSpaceController(ApplicationDbContext context, IParkingManagement parkingManagementManager, IParking parkingManager, IParkingDetailsOnDate parkingDetailsManager)
 {
     _context = context;
     _parkingManagementManager = parkingManagementManager;
     _parkingManager           = parkingManager;
     _parkingDetailsManager    = parkingDetailsManager;
 }
예제 #5
0
        public static bool Update(BaseParkinfo model, bool addlog = true)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            if (string.IsNullOrWhiteSpace(model.PKNo))
            {
                throw new MyException("车场编号不能为空");
            }

            IParking     factory = ParkingFactory.GetFactory();
            BaseParkinfo park    = factory.QueryParkingByParkingNo(model.PKNo);

            if (park != null && park.PKID != model.PKID)
            {
                throw new MyException("车场编号不能重复");
            }

            bool result = factory.Update(model);

            if (result && addlog)
            {
                OperateLogServices.AddOperateLog <BaseParkinfo>(model, OperateType.Update);
            }
            return(result);
        }
예제 #6
0
        public async Task CreateNextParkingDaysIfNeccesary(int daysToAddInAdvance, IParking parkingManager, IParkingDetailsOnDate parkingDetailsManager, IParkingManagement parkingManagementManager)
        {
            await AssignClassVariables(daysToAddInAdvance, parkingManager, parkingDetailsManager, parkingManagementManager);

            var LastExistingDateInTheDB = await _parkingDetailsManager.GetLastExistingDate();

            var allNeededDaysExist = await CheckIfAllNeededDaysExist(LastExistingDateInTheDB);

            if (allNeededDaysExist)
            {
                return;
            }

            var isThereAnyMissingDate = await _parkingManager.GetAllParkingSpacesWithMissingDate(LastExistingDateInTheDB.AddBusinessDays(this.daysToAddInAdvance).Date, false);

            var numberOfPArkingSpaces = await _parkingManager.GetAllParkingSpaces();

            if (isThereAnyMissingDate.Count() == numberOfPArkingSpaces.Count())
            {
                return;
            }

            var numberOfDaysToCheck = await GetTotalNumberOfDaysToCheck(LastExistingDateInTheDB);

            await CheckIfRecordExistIOnDateAndCreateIfNot(numberOfDaysToCheck);
        }
예제 #7
0
        public List <ParkingDeserialize> GetParking()
        {
            //Initialize
            IParking repos = DataFactory.ParkingRepository();

            return(repos.GetOutParkingInfo());
        }
예제 #8
0
        public ActionResult GetParking()
        {
            //Initialize
            IParking repos = DataFactory.ParkingRepository();

            return(Content(JsonConvert.SerializeObject(repos.GetOutParkingInfo()), "application/json"));
        }
예제 #9
0
 public HomeController(ApplicationDbContext context, UserManager <User> userManager, SignInManager <User> signInManager, IParkingManagement parkingManagementManager, IParking parkingManager, IParkingDetailsOnDate parkingDetailsManager)
 {
     _userManager = userManager;
     _parkingManagementManager = parkingManagementManager;
     _parkingManager           = parkingManager;
     _parkingDetailsManager    = parkingDetailsManager;
     _context = context;
 }
예제 #10
0
        public void Execute()
        {
            IParking   whereToPark = parkingRepository.Find(parkingId);
            CarSubject carToPark   = carRepository.Find(carId);

            whereToPark.SetCarToParking(carToPark);
            carToPark.IsParked = true;
        }
예제 #11
0
        public void Undo()
        {
            IParking   whereToPark = parkingRepository.Find(parkingId);
            CarSubject carToPark   = carRepository.Find(carId);

            whereToPark.RemoveCarfromParking(carToPark);
            carToPark.IsParked = false;
        }
예제 #12
0
 public ManageUserAssignmentsToParkingController(ApplicationDbContext context, UserManager <User> userManager, IParkingManagement parkingManagementManager, IParkingDetailsOnDate parkingDetailsManager, IParking parkingManager)
 {
     _context     = context;
     _userManager = userManager;
     _parkingManagementManager = parkingManagementManager;
     _parkingDetailsManager    = parkingDetailsManager;
     _parkingManager           = parkingManager;
 }
예제 #13
0
        public static bool Add(BaseParkinfo model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            if (string.IsNullOrWhiteSpace(model.PKNo))
            {
                throw new MyException("车场编号不能为空");
            }

            IParking     factory = ParkingFactory.GetFactory();
            BaseParkinfo park    = factory.QueryParkingByParkingNo(model.PKNo);

            if (park != null)
            {
                throw new MyException("车场编号不能重复");
            }

            model.PKID = GuidGenerator.GetGuidString();

            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                try
                {
                    dbOperator.BeginTransaction();
                    bool result = factory.Add(model, dbOperator);
                    if (!result)
                    {
                        throw new MyException("添加车场信息失败");
                    }

                    result = ParkCarModelServices.AddDefault(model.PKID, dbOperator);
                    if (!result)
                    {
                        throw new MyException("添加车型失败");
                    }

                    result = ParkCarTypeServices.AddDefault(model.PKID, dbOperator);
                    if (!result)
                    {
                        throw new MyException("添加车类型失败");
                    }
                    dbOperator.CommitTransaction();
                    if (result)
                    {
                        OperateLogServices.AddOperateLog <BaseParkinfo>(model, OperateType.Add);
                    }
                    return(true);
                }
                catch
                {
                    dbOperator.RollbackTransaction();
                    throw;
                }
            }
        }
예제 #14
0
 public static IParking GetFactory()
 {
     if (factory == null)
     {
         Type type = Type.GetType("Common." + SystemDefaultConfig.DatabaseProvider + "Repository.ParkingDAL,Common." + SystemDefaultConfig.DatabaseProvider + "Repository", true);
         factory = (IParking)Activator.CreateInstance(type);
     }
     return(factory);
 }
예제 #15
0
        public static BaseParkinfo QueryParkingByParkingID(string ParkingID)
        {
            if (string.IsNullOrEmpty(ParkingID))
            {
                throw new ArgumentNullException("villageIds");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByParkingID(ParkingID));
        }
 public void Update(IParking parking)
 {
     Name                    = parking.Name;
     LastUpdateDate          = parking.LastUpdateDate;
     TotalPlacesCount        = parking.TotalPlacesCount;
     FreePlacesCount         = parking.FreePlacesCount;
     PreviousFreePlacesCount = parking.PreviousFreePlacesCount;
     TakenPlacesCount        = parking.TakenPlacesCount;
     ParkingAvailability     = parking.ParkingAvailability;
 }
예제 #17
0
        public static List <BaseParkinfo> QueryParkingByVillageId(string villageId)
        {
            if (string.IsNullOrWhiteSpace(villageId))
            {
                throw new ArgumentNullException("villageId");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByVillageId(villageId));
        }
예제 #18
0
        public static BaseParkinfo QueryParkingByRecordId(string recordId)
        {
            if (string.IsNullOrWhiteSpace(recordId))
            {
                throw new ArgumentNullException("recordId");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByRecordId(recordId));
        }
예제 #19
0
        public static List <BaseParkinfo> QueryParkingByRecordIds(List <string> recordIds)
        {
            if (recordIds == null || recordIds.Count == 0)
            {
                throw new ArgumentNullException("recordIds");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByRecordIds(recordIds));
        }
예제 #20
0
        public static List <BaseParkinfo> QueryParkingByCompanyIds(List <string> companyIds)
        {
            if (companyIds == null || companyIds.Count == 0)
            {
                throw new ArgumentNullException("companyIds");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByCompanyIds(companyIds));
        }
예제 #21
0
        public static List <BaseParkinfo> QueryParkingByVillageIds(List <string> villageIds)
        {
            if (villageIds == null || villageIds.Count == 0)
            {
                throw new ArgumentNullException("villageIds");
            }
            IParking factory = ParkingFactory.GetFactory();

            return(factory.QueryParkingByVillageIds(villageIds));
        }
예제 #22
0
        public int Save(IParking parking)
        {
            if (parking.Id == 0)
            {
                parking.Id = lastId;
                lastId++;
            }

            Parkings.Add(parking.Id, parking);
            return(parking.Id);
        }
예제 #23
0
        /// <summary>
        /// 修改车场结算配置
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static bool UpdateParkSettleConfig(BaseParkinfo model)
        {
            IParking factory = ParkingFactory.GetFactory();
            bool     result  = factory.UpdateParkSettleConfig(model);

            if (result)
            {
                OperateLogServices.AddOperateLog <BaseParkinfo>(model, OperateType.Update);
            }
            return(result);
        }
예제 #24
0
        public static int UpdateCarBit(string PKID)
        {
            IParking factory = ParkingFactory.GetFactory();
            int      result  = factory.UpdateCarBit(PKID);

            if (result > 0)
            {
                OperateLogServices.AddOperateLog(OperateType.Update, string.Format("PKID:{0}", PKID));
            }
            return(result);
        }
예제 #25
0
        public static List <BaseParkinfo> QueryPage(string villageId, int pageIndex, int pageSize, out int totalCount)
        {
            IParking            factory     = ParkingFactory.GetFactory();
            List <BaseParkinfo> parkings    = factory.QueryPage(villageId, pageIndex, pageSize, out totalCount);
            IParkArea           factoryArea = ParkAreaFactory.GetFactory();

            foreach (var item in parkings)
            {
                item.CarBitNum = factoryArea.GetCarBitNumByParkingId(item.PKID);
            }
            return(parkings);
        }
예제 #26
0
        static void Main(string[] args)
        {
            ISettings settings = SetSettings(Settings.Instance);
            IParking  parking  = Parking.Instance;

            parking.SetSettings(settings, new FileLogger("Transactions.log"));
            foreach (var car in GetCars())
            {
                parking.AddCar(car);
            }
            Menu menu = new Menu();

            menu.MainMenu(parking);
        }
예제 #27
0
 public void Statistics_DailyGather(DateTime start, DateTime end)
 {
     try
     {
         IParking            iparking = ParkingFactory.GetFactory();
         string              strerror = string.Empty;
         List <BaseParkinfo> parks    = iparking.QueryParkingAll();
         if (parks == null || parks.Count == 0)
         {
             return;
         }
         end = end.Date.AddHours(23).AddMinutes(59);
         //循环车场
         foreach (BaseParkinfo p in parks)
         {
             //如果在线上统计,则本地就不统计
             if (p.IsOnLineGathe == YesOrNo.Yes)
             {
                 continue;
             }
             List <ParkGate> gatelist = ParkGateServices.QueryByParkingId(p.PKID);
             TimeSpan        ts       = end - start;
             //统计近8天的数据
             for (int i = ts.Days; i >= 0; i--)
             {
                 try
                 {
                     new DailyGatherServices().Statistics_DailyByHour(p, end, i);
                 }
                 catch (Exception ex)
                 {
                     Common.Services.TxtLogServices.WriteTxtLog("按时统计异常 异常信息:{0}", ex.Message);
                 }
                 //按通道统计时数据
                 try
                 {
                     new GateGatherServices().Statistics_DailyByGate(gatelist, p, end, i);
                 }
                 catch (Exception ex)
                 {
                     Common.Services.TxtLogServices.WriteTxtLog("按通道统计异常 异常信息:{0}", ex.Message);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Common.Services.TxtLogServices.WriteTxtLog("按日统计异常 异常信息:{0}", ex.Message);
     }
 }
예제 #28
0
        public void MainMenu(IParking parking)
        {
            _parking = parking;
            bool exitMenu = false;

            var   startTimeSpan       = TimeSpan.Zero;
            var   periodTimeSpan      = TimeSpan.FromSeconds(parking.Settings.Timeout);
            Timer parkingPaymentTimer = null;
            Timer logTransactionTimer = null;

            try
            {
                parkingPaymentTimer = new Timer((e) =>
                {
                    parking.GetPaymentFromCar();
                }, null, periodTimeSpan, periodTimeSpan);

                logTransactionTimer = new Timer((e) =>
                {
                    parking.LogTransactionEveryMinute();
                }, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1));

                var menu = BuildMainMenu();

                while (!exitMenu)
                {
                    DisplayMainMenu(menu);

                    var menuChoice = GetMenuSelection(menu);

                    menuChoice.ItemHandler?.Invoke();

                    exitMenu = menuChoice.IsExitOption;
                }
            }
            finally
            {
                if (parkingPaymentTimer != null)
                {
                    parkingPaymentTimer.Dispose();
                }
                if (logTransactionTimer != null)
                {
                    logTransactionTimer.Dispose();
                }
            }
        }
예제 #29
0
        //[SwaggerImplementationNotes("取得所有公車路線")]
        public IHttpActionResult GetParking()
        {
            //Initial
            IHttpActionResult responseResult;
            IParking          repos = DataFactory.ParkingRepository();
            //序列化撈出來的資料
            var jsonSerialize = JsonConvert.SerializeObject(repos.GetOutParkingInfo());
            //做成JSON字串包裝到最後輸出
            StringContent       responseMsgString = new StringContent(jsonSerialize, System.Text.Encoding.UTF8, "application/json");
            HttpResponseMessage responseMsg       = new HttpResponseMessage()
            {
                Content = responseMsgString
            };

            responseResult = ResponseMessage(responseMsg);

            return(responseResult);
        }
        public static ParkingAvailability CalculateParkingAvailability(this IParking parking)
        {
            var onePercent = (double)parking.TotalPlacesCount / 100;

            if (parking.FreePlacesCount == 0)
            {
                return(ParkingAvailability.None);
            }
            if (parking.FreePlacesCount <= (int)(onePercent * 10))
            {
                return(ParkingAvailability.Low);
            }
            else if (parking.FreePlacesCount <= (int)(onePercent * 30))
            {
                return(ParkingAvailability.Medium);
            }
            else
            {
                return(ParkingAvailability.High);
            }
        }