public void updateVhEntryParkingAdr(string vh_id, string parkAdrID)
 {
     using (DBConnection_EF con = DBConnection_EF.GetUContext())
     {
         APARKZONEDETAIL parkZoneDetail = parkZoneDetailDao.getByAdrID(con, parkAdrID);
         parkZoneDetail.CAR_ID = vh_id;
         con.Entry(parkZoneDetail).Property(p => p.CAR_ID).IsModified = true;
         parkZoneDetailDao.update(con, parkZoneDetail);
     }
 }
        public bool tryAdjustTheVhParkingPositionByParkZoneAndPrio(APARKZONEDETAIL want2AdjustZoneDetail)
        {
            APARKZONEMASTER park_master = null;

            //using (DBConnection_EF con = new DBConnection_EF())
            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                park_master = parkZoneMasterDao.getByID(con, want2AdjustZoneDetail.PARK_ZONE_ID);
            }
            return(tryAdjustTheVhParkingPositionByParkZoneAndPrio(park_master));
        }
 public void resetParkAdr(string park_adr)
 {
     //using (DBConnection_EF con = new DBConnection_EF())
     using (DBConnection_EF con = DBConnection_EF.GetUContext())
     {
         APARKZONEDETAIL parkZoneDetail = parkZoneDetailDao.getByAdrID(con, park_adr);
         if (parkZoneDetail != null)
         {
             parkZoneDetail.CAR_ID = string.Empty;
             parkZoneDetailDao.update(con, parkZoneDetail);
         }
     }
 }
        public void updateVhEntryParkingAdr(string vh_id, APARKZONEDETAIL parkZoneDetail)
        {
            ALINE line = scApp.getEQObjCacheManager().getLine();

            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                updateParkAdrEmpty(vh_id);
                con.APARKZONEDETAIL.Attach(parkZoneDetail);
                parkZoneDetail.CAR_ID = vh_id;
                con.Entry(parkZoneDetail).Property(p => p.CAR_ID).IsModified = true;
                parkZoneDetailDao.update(con, parkZoneDetail);
            }
        }
        public APARKZONEDETAIL getParkAddress(string adr, E_VH_TYPE park_type)
        {
            APARKZONEDETAIL park_detail = null;

            //DBConnection_EF con = DBConnection_EF.GetContext();
            //using (DBConnection_EF con = new DBConnection_EF())
            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                park_detail = parkZoneDetailDao.getParkAdrCountByParkTypeAndAdr
                                  (con,
                                  scApp.getEQObjCacheManager().getLine().Currnet_Park_Type,
                                  adr,
                                  park_type);
            }
            return(park_detail);
        }
        private APARKZONEDETAIL findFitParkZoneDetailInParkMater(APARKZONEMASTER zone_master_temp)
        {
            //DBConnection_EF con = DBConnection_EF.GetContext();
            APARKZONEDETAIL bestParkDetailTemp = null;

            //using (DBConnection_EF con = new DBConnection_EF())
            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                switch (zone_master_temp.PARK_TYPE)
                {
                case E_PARK_TYPE.OrderByAsc:
                    //bestPackDetailTemp = packZoneDetailDao.getByPackZoneIDPrioAscAndCanPackingAdr
                    bestParkDetailTemp = parkZoneDetailDao.getByParkZoneIDPrioDes
                                             (con, zone_master_temp.PARK_ZONE_ID);
                    break;

                case E_PARK_TYPE.OrderByDes:
                    bestParkDetailTemp = parkZoneDetailDao.getByParkZoneIDPrioDes
                                             (con, zone_master_temp.PARK_ZONE_ID);
                    break;
                }
            }
            return(bestParkDetailTemp);
        }
Exemplo n.º 7
0
 public void add(DBConnection_EF con, APARKZONEDETAIL park_zone_detail)
 {
     con.APARKZONEDETAIL.Add(park_zone_detail);
     con.SaveChanges();
 }
Exemplo n.º 8
0
 public void update(DBConnection_EF con, APARKZONEDETAIL section)
 {
     //bool isDetached = con.Entry(section).State == EntityState.Modified;
     //if (isDetached)
     con.SaveChanges();
 }
        public bool tryAdjustTheVhParkingPositionByParkZoneAndPrio(APARKZONEMASTER want2AdjustZoneMater)
        {
            if (want2AdjustZoneMater == null)
            {
                return(false);
            }
            bool isSuccess  = true;
            int  first_Prio = 11;
            List <APARKZONEDETAIL> hasParkingDetail = null;

            //DBConnection_EF con = DBConnection_EF.GetContext();
            //using (DBConnection_EF con = new DBConnection_EF())
            using (DBConnection_EF con = DBConnection_EF.GetUContext())
            {
                hasParkingDetail = parkZoneDetailDao.loadByParkZoneIDAndVhOnAdr(con, want2AdjustZoneMater.PARK_ZONE_ID);
                if (hasParkingDetail == null || hasParkingDetail.Count == 0)
                {
                    return(false);
                }
                APARKZONEDETAIL nextParkZoneDetail = null;

                switch (want2AdjustZoneMater.PARK_TYPE)
                {
                case E_PARK_TYPE.OrderByAsc:
                    foreach (APARKZONEDETAIL parkDetail in hasParkingDetail)
                    {
                        if (parkDetail.PRIO > first_Prio)
                        {
                            nextParkZoneDetail = parkZoneDetailDao.
                                                 getByZoneIDAndPRIO(con, parkDetail.PARK_ZONE_ID, parkDetail.PRIO - 1);
                            if (nextParkZoneDetail != null &&
                                SCUtility.isEmpty(nextParkZoneDetail.CAR_ID))
                            {
                                //目前的寫法應該不用在檢查是否有人預約了下一個車位
                                bool hasReserve = scApp.VehicleBLL.hasVhReserveParkAdr(nextParkZoneDetail.ADR_ID);
                                if (!hasReserve)
                                {
                                    //scApp.CMDBLL.creatCommand_OHTC(packDetail.CAR_ID, string.Empty, string.Empty, E_CMD_TYPE.Move_Pack
                                    //     , packDetail.ADR_ID, nextPackZoneDetail.ADR_ID, 0, 0);
                                    //if (!scApp.CMDBLL.generateCmd_OHTC_Details())
                                    //{
                                    //    break;
                                    //}
                                    scApp.CMDBLL.doCreatTransferCommand(parkDetail.CAR_ID, string.Empty, string.Empty, E_CMD_TYPE.Move_Park
                                                                        , parkDetail.ADR_ID, nextParkZoneDetail.ADR_ID, 0, 0);
                                }
                            }
                        }
                    }
                    break;

                case E_PARK_TYPE.OrderByDes:
                    //1確認是否有其他車輛已經預約這個位置
                    //   是-找下一個位置是否有空位
                    //      是-往前移
                    //      否-先記住命令,再找下一台,直到找到最後一個可以往前移的空位時就一次下達
                    //hasPackingDetail.Reverse();
                    //APACKZONEDETAIL firstPackDetail = hasPackingDetail.First();
                    //APACKZONEDETAIL currentPackZoneDetail = null;

                    //bool hasOrtherVhReserve = scApp.VehicleBLL.hasVhReservePackAdr(firstPackDetail.ADR_ID);
                    //if (hasOrtherVhReserve)
                    //{
                    //    List<ACMD_OHTC> ACMD_OHTCs = new List<ACMD_OHTC>();
                    //    for (int next_prio = firstPackDetail.PRIO - 1; next_prio <= first_Prio; next_prio--)
                    //    {
                    //        currentPackZoneDetail = packZoneDetailDao.
                    //             getByZoneIDAndPRIO(con, firstPackDetail.PACK_ZONE_ID, next_prio + 1);
                    //        nextPackZoneDetail = packZoneDetailDao.
                    //             getByZoneIDAndPRIO(con, firstPackDetail.PACK_ZONE_ID, next_prio);
                    //        if (nextPackZoneDetail != null)
                    //        {
                    //            ACMD_OHTC prebuildCMD = scApp.CMDBLL.buildCommand_OHTC(currentPackZoneDetail.CAR_ID, string.Empty, E_CMD_TYPE.Move_Pack
                    //                , currentPackZoneDetail.ADR_ID, nextPackZoneDetail.ADR_ID, 0, 0);
                    //            ACMD_OHTCs.Add(prebuildCMD);
                    //            if (SCUtility.isEmpty(nextPackZoneDetail.CAR_ID))
                    //            {
                    //                foreach (ACMD_OHTC cmd in ACMD_OHTCs)
                    //                {
                    //                    scApp.CMDBLL.creatCommand_OHTC(cmd);
                    //                    if (!scApp.CMDBLL.generateCmd_OHTC_Details())
                    //                    {
                    //                        return false;
                    //                    }
                    //                    isSuccess = true;
                    //                }
                    //                return true;
                    //            }
                    //        }
                    //        else
                    //        {
                    //            return false;
                    //        }
                    //    }
                    //}
                    break;
                }
            }
            return(isSuccess);
        }
        /// <summary>
        /// Timer Action的執行動作
        /// </summary>
        /// <param name="obj">The object.</param>
        public override void doProcess(object obj)
        {
            if (System.Threading.Interlocked.Exchange(ref syncPoint, 1) == 0)
            {
                //lock (scApp.pack_lock_obj)
                //{
                try
                {
                    //0.先判斷各區域的停車位是否皆已移到最高順位
                    scApp.ParkBLL.tryAdjustTheVhParkingPositionByParkZoneAndPrio();
                    //1.各PackZone水位檢查
                    //  a.找出是否有低於目前水位的PackZone
                    //  b.找出最近的PackZone至少高於水位下限一台,若有則派至此處。
                    List <APARKZONEMASTER> vhNotEnoughParkZones = null;
                    APARKZONEDETAIL        nearbyZoneDetail     = null;
                    if (!scApp.ParkBLL.checkParkZoneLowerBorder(out vhNotEnoughParkZones))
                    {
                        foreach (APARKZONEMASTER vhNotEnoughParkZone in vhNotEnoughParkZones)
                        {
                            if (scApp.ParkBLL.tryFindNearbyParkZoneHasVhToSupport(vhNotEnoughParkZone, out nearbyZoneDetail))
                            {
                                APARKZONEDETAIL vhNotEnoughParkDeatil = null;
                                switch (vhNotEnoughParkZone.PARK_TYPE)
                                {
                                case E_PARK_TYPE.OrderByAsc:
                                    vhNotEnoughParkDeatil = scApp.ParkBLL.
                                                            getParkDetailByParkZoneIDPrioAscAndCanParkingAdr(vhNotEnoughParkZone.PARK_ZONE_ID);
                                    break;

                                case E_PARK_TYPE.OrderByDes:
                                    vhNotEnoughParkDeatil = scApp.ParkBLL.
                                                            getParkDetailByParkZoneIDPrioDes(vhNotEnoughParkZone.PARK_ZONE_ID);
                                    break;
                                }
                                //bool isSccess = false;
                                //isSccess = scApp.CMDBLL.creatCommand_OHTC(nearbyZoneDetail.CAR_ID, string.Empty, string.Empty, E_CMD_TYPE.Move_Pack
                                //     , nearbyZoneDetail.ADR_ID, vhNotEnoughPackDeatil.ADR_ID, 0, 0);
                                //if (isSccess)
                                //{
                                //    isSccess = scApp.CMDBLL.generateCmd_OHTC_Details();
                                //    if (isSccess)
                                //    {
                                //        if (nearbyZoneDetail != null)
                                //        {
                                //            APACKZONEMASTER nearbyZoneMaster = scApp.PackBLL.
                                //                getPackZoneMasterByPackZoneID(nearbyZoneDetail.PACK_ZONE_ID);
                                //            if (nearbyZoneMaster.PACK_TYPE == E_PACK_TYPE.OrderByAsc)
                                //            {
                                //                scApp.PackBLL.tryAdjustTheVhPackingPositionByPackZoneAndPrio(nearbyZoneMaster);
                                //            }
                                //        }
                                //        if (vhNotEnoughPackZone != null &&
                                //            vhNotEnoughPackZone.PACK_TYPE == E_PACK_TYPE.OrderByDes)
                                //        {
                                //            scApp.PackBLL.tryAdjustTheVhPackingPositionByPackZoneAndPrio(vhNotEnoughPackZone);
                                //        }
                                //    }
                                //}

                                if (vhNotEnoughParkDeatil == null || nearbyZoneDetail == null)
                                {
                                    continue;
                                }
                                //if (scApp.CMDBLL.hasExcuteCMDWantToAdr(vhNotEnoughPackDeatil.ADR_ID))
                                //{
                                //    continue;
                                //}
                                bool isSccess = false;
                                isSccess = scApp.CMDBLL.doCreatTransferCommand(nearbyZoneDetail.CAR_ID, string.Empty, string.Empty, E_CMD_TYPE.Move_Park
                                                                               , nearbyZoneDetail.ADR_ID, vhNotEnoughParkDeatil.ADR_ID, 0, 0);
                                if (isSccess)
                                {
                                    if (nearbyZoneDetail != null)
                                    {
                                        APARKZONEMASTER nearbyZoneMaster = scApp.ParkBLL.
                                                                           getParkZoneMasterByParkZoneID(nearbyZoneDetail.PARK_ZONE_ID);
                                        if (nearbyZoneMaster.PARK_TYPE == E_PARK_TYPE.OrderByAsc)
                                        {
                                            scApp.ParkBLL.tryAdjustTheVhParkingPositionByParkZoneAndPrio(nearbyZoneMaster);
                                        }
                                    }
                                    if (vhNotEnoughParkZone != null &&
                                        vhNotEnoughParkZone.PARK_TYPE == E_PARK_TYPE.OrderByDes)
                                    {
                                        scApp.ParkBLL.tryAdjustTheVhParkingPositionByParkZoneAndPrio(vhNotEnoughParkZone);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        APARKZONEDETAIL emptyParkZoneDetail = null;
                        AVEHICLE        cyclingVh           = null;
                        if (scApp.ParkBLL.tryFindCycleRunVhToParking(out cyclingVh, out emptyParkZoneDetail))
                        {
                            string cyclingvh_id     = cyclingVh.VEHICLE_ID;
                            string cyclingvh_crtAdr = cyclingVh.CUR_ADR_ID;
                            //bool isSccess = false;
                            //isSccess = scApp.CMDBLL.creatCommand_OHTC(cyclingVh.VEHICLE_ID, string.Empty, string.Empty, E_CMD_TYPE.Move_Pack
                            //     , cyclingVh.CUR_ADR_ID, emptyPackZoneDetail.ADR_ID, 0, 0);
                            //isSccess = scApp.CMDBLL.generateCmd_OHTC_Details();

                            scApp.CMDBLL.doCreatTransferCommand(cyclingvh_id,
                                                                string.Empty,
                                                                string.Empty,
                                                                E_CMD_TYPE.Move_Park,
                                                                cyclingvh_crtAdr,
                                                                emptyParkZoneDetail.ADR_ID,
                                                                0, 0);
                            APARKZONEMASTER emptyZoneMaster = scApp.ParkBLL.
                                                              getParkZoneMasterByParkZoneID(emptyParkZoneDetail.PARK_ZONE_ID);
                            if (emptyZoneMaster != null &&
                                emptyZoneMaster.PARK_TYPE == E_PARK_TYPE.OrderByDes)
                            {
                                scApp.ParkBLL.tryAdjustTheVhParkingPositionByParkZoneAndPrio(emptyZoneMaster);
                            }
                        }
                    }
                    //2.車子目前停車位是否在該PackZone的最高順位
                    //  a.找出所有在Packing的VH
                    //  b.foreach 每台車 目前所在的Adr 他隸屬的 PackZone-PackType
                    //     i.OrderByAsc,找出是否有比該台車目前所停放的Adr更前面的 PRIO 且有空位。
                    //    ii.OrderByDes,找出目前所停放的Adr是否已經被預約要停放
                    //if (nearbyZoneDetail != null)
                    //{
                    //    scApp.PackBLL.tryAdjustTheVhPackingPositionByPackZoneAndPrio(nearbyZoneDetail);
                    //}
                    //if (vhNotEnoughPackZone != null &&
                    //    vhNotEnoughPackZone.PACK_TYPE == E_PACK_TYPE.OrderByDes)
                    //{
                    //    scApp.PackBLL.tryAdjustTheVhPackingPositionByPackZoneAndPrio(vhNotEnoughPackZone);
                    //}
                    //APACKZONEDETAIL crtPackZoneDetail = null;
                    //APACKZONEDETAIL nextPackZoneDetail = null;
                    //if (scApp.PackBLL.tryAdjustTheVhPackingPositionByPrio
                    //    (out crtPackZoneDetail, out nextPackZoneDetail))
                    //{
                    //    scApp.CMDBLL.creatCommand_OHTC(crtPackZoneDetail.CAR_ID, string.Empty, E_CMD_TYPE.Move_Pack
                    //           , crtPackZoneDetail.ADR_ID, nextPackZoneDetail.ADR_ID, 0, 0);
                    //    //Task.Run(() => scApp.CMDBLL.generateCmd_OHTC_Detals());
                    //    scApp.CMDBLL.generateCmd_OHTC_Detals();
                    //}
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Exception");
                }
                finally
                {
                    System.Threading.Interlocked.Exchange(ref syncPoint, 0);
                }
                //}
            }
        }
        public bool tryFindNearbyParkZoneHasVhToSupport(APARKZONEMASTER not_enough_zone, out APARKZONEDETAIL nearbyParkZoneDetail)
        {
            bool hasFind = false;

            nearbyParkZoneDetail = null;
            List <APARKZONEDETAIL> eachParkZoneFirstDetailHasVh = null;

            using (DBConnection_EF con = new DBConnection_EF())
            {
                eachParkZoneFirstDetailHasVh = parkZoneDetailDao.loadByEachParkZoneFirstVh(con
                                                                                           , scApp.getEQObjCacheManager().getLine().Currnet_Park_Type);
                if (eachParkZoneFirstDetailHasVh != null)
                {
                    List <KeyValuePair <List <APARKZONEDETAIL>, double> > lstParkDetailAndDis = new List <KeyValuePair <List <APARKZONEDETAIL>, double> >();
                    foreach (APARKZONEDETAIL park_zone_detail in eachParkZoneFirstDetailHasVh)
                    {
                        if (SCUtility.isMatche(park_zone_detail.PARK_ZONE_ID, not_enough_zone.PARK_ZONE_ID))
                        {
                            continue;
                        }
                        List <APARKZONEDETAIL> lastDetail = parkZoneDetailDao.
                                                            loadByParkZoneIDAndVhOnAdr(con, park_zone_detail.PARK_ZONE_ID);
                        APARKZONEMASTER zoneMasterTemp = parkZoneMasterDao.
                                                         getByID(con, park_zone_detail.PARK_ZONE_ID); //TODO 要依據ParkZoneType抓取
                        if (not_enough_zone.VEHICLE_TYPE != zoneMasterTemp.VEHICLE_TYPE ||
                            lastDetail.Count <= zoneMasterTemp.LOWER_BORDER)
                        {
                            continue;
                        }

                        KeyValuePair <string[], double> route_distance;
                        if (scApp.RouteGuide.checkRoadIsWalkable(zoneMasterTemp.ENTRY_ADR_ID, not_enough_zone.ENTRY_ADR_ID, out route_distance))
                        {
                            lstParkDetailAndDis.Add
                                (new KeyValuePair <List <APARKZONEDETAIL>, double>(lastDetail, route_distance.Value));
                        }
                        //string[] ReutrnFromAdr2ToAdr = scApp.RouteGuide.DownstreamSearchSection
                        //    (zoneMasterTemp.ENTRY_ADR_ID, not_enough_zone.ENTRY_ADR_ID, 1);
                        //if (ReutrnFromAdr2ToAdr.Length > 0 && SCUtility.isEmpty(ReutrnFromAdr2ToAdr[0]))
                        //    continue;
                        //string[] minRoute_From2To = ReutrnFromAdr2ToAdr[0].Split('=');

                        //double distance = 0;
                        //if (double.TryParse(minRoute_From2To[1], out distance))
                        //{
                        //    lstParkDetailAndDis.Add
                        //        (new KeyValuePair<List<APARKZONEDETAIL>, double>(lastDetail, distance));
                        //}
                        //else
                        //{
                        //    lstParkDetailAndDis.Add
                        //        (new KeyValuePair<List<APARKZONEDETAIL>, double>(lastDetail, double.MaxValue));
                        //}
                    }
                    if (lstParkDetailAndDis.Count > 0)
                    {
                        lstParkDetailAndDis = lstParkDetailAndDis.OrderBy(o => o.Value).ToList();

                        List <APARKZONEDETAIL> nearbyParkZoneDetails = lstParkDetailAndDis.First().Key.OrderBy(o => o.PRIO).ToList();

                        nearbyParkZoneDetail = nearbyParkZoneDetails.First();
                        hasFind = true;
                    }
                }
            }
            return(hasFind);
        }
        public FindParkResult tryFindParkZone
            (E_VH_TYPE e_VH_TYPE, string vh_current_adr, out APARKZONEDETAIL bsetParkDeatil, APARKZONEMASTER injectionParkMaster)
        {
            FindParkResult result    = FindParkResult.OrtherError;
            bool           isSuccess = false;

            bsetParkDeatil = null;
            List <APARKZONEMASTER> parkZoneMasters = null;

            //DBConnection_EF con = DBConnection_EF.GetContext();
            //using (DBConnection_EF con = new DBConnection_EF())
            //{
            //packZoneMasters = packZoneMasterDao.loadByPackTypeIDAndHasPackSpace(con
            //    , scApp.getEQObjCacheManager().getLine().Currnet_Pack_Type);
            parkZoneMasters = loadByParkTypeIDAndHasParkSpaceByCount
                                  (scApp.getEQObjCacheManager().getLine().Currnet_Park_Type, e_VH_TYPE);

            //For Park時繞回自己位置用的
            //todo 暫時註解掉 20190917
            //if (injectionParkMaster != null &&
            //    !parkZoneMasters.Contains(injectionParkMaster))
            //{
            //    parkZoneMasters.Add(injectionParkMaster);
            //}

            if (parkZoneMasters != null && parkZoneMasters.Count > 0)
            {
                List <KeyValuePair <APARKZONEMASTER, double> > lstParkZoneMasterAndDis = new List <KeyValuePair <APARKZONEMASTER, double> >();

                foreach (APARKZONEMASTER park_zone_master in parkZoneMasters)
                {
                    //if (park_zone_master.VEHICLE_TYPE != E_VH_TYPE.None &&
                    //    vh.VEHICLE_TYPE != E_VH_TYPE.None)
                    //{
                    //    if (park_zone_master.VEHICLE_TYPE != vh.VEHICLE_TYPE)
                    //    {
                    //        continue;
                    //    }
                    //}
                    //當VH 的Node_ADR 與該Park_Zone_Master的Entry_ADR_ID相同時,就直接讓該台車進入該Adr Zone,不用再找

                    if (SCUtility.isMatche(park_zone_master.ENTRY_ADR_ID, vh_current_adr))
                    {
                        lstParkZoneMasterAndDis.Add
                            (new KeyValuePair <APARKZONEMASTER, double>(park_zone_master, double.MinValue));
                        break;
                    }


                    //string[] ReutrnFromAdr2ToAdr = scApp.RouteGuide.DownstreamSearchRoute
                    KeyValuePair <string[], double> route_distance;
                    if (scApp.RouteGuide.checkRoadIsWalkable(vh_current_adr, park_zone_master.ENTRY_ADR_ID, out route_distance))
                    {
                        lstParkZoneMasterAndDis.Add
                            (new KeyValuePair <APARKZONEMASTER, double>(park_zone_master, route_distance.Value));
                    }


                    //string[] ReutrnFromAdr2ToAdr = scApp.RouteGuide.DownstreamSearchSection
                    //    (vh_node_adr, park_zone_master.ENTRY_ADR_ID, 1);
                    //if (ReutrnFromAdr2ToAdr.Length > 0 && SCUtility.isEmpty(ReutrnFromAdr2ToAdr[0]))
                    //{
                    //    continue;
                    //}
                    //string[] minRoute_From2To = ReutrnFromAdr2ToAdr[0].Split('=');
                    //double distance = 0;
                    //if (double.TryParse(minRoute_From2To[1], out distance))
                    //{
                    //    lstParkZoneMasterAndDis.Add
                    //        (new KeyValuePair<APARKZONEMASTER, double>(park_zone_master, distance));
                    //}
                    //else
                    //{
                    //    lstParkZoneMasterAndDis.Add
                    //        (new KeyValuePair<APARKZONEMASTER, double>(park_zone_master, double.MaxValue));
                    //}
                }
                if (lstParkZoneMasterAndDis.Count > 0)
                {
                    lstParkZoneMasterAndDis = lstParkZoneMasterAndDis.OrderBy(o => o.Value).ToList();
                    foreach (KeyValuePair <APARKZONEMASTER, double> keyValue in lstParkZoneMasterAndDis)
                    {
                        APARKZONEMASTER zone_master_temp   = keyValue.Key;
                        APARKZONEDETAIL bestParkDetailTemp = null;
                        bestParkDetailTemp = findFitParkZoneDetailInParkMater(zone_master_temp);
                        if (bestParkDetailTemp != null)
                        {
                            bsetParkDeatil = bestParkDetailTemp;
                            isSuccess      = true;
                            result         = FindParkResult.Success;
                            break;
                        }
                    }
                }
                else
                {
                    ParkAdrInfoTarce();
                    result = FindParkResult.HasParkZoneNoFindRoute;
                }
            }
            else
            {
                result = FindParkResult.NoParkZone;
            }
            //}
            return(result);
        }