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); }
public void add(DBConnection_EF con, APARKZONEDETAIL park_zone_detail) { con.APARKZONEDETAIL.Add(park_zone_detail); con.SaveChanges(); }
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); }