public ActionResult Index2(RegionCondition Condition) { ListRegionModel model = new ListRegionModel(); int totalRecord = 0; model.ListRegion = regionService.List(Condition.CityId, Condition.DistrictId, Condition.SearchText, Condition.Page, Condition.PageSize, out totalRecord); model.ListCity = placeService.ListPlaceItemByParent(0); model.ListCity.Insert(0, new Entities.Item() { Id = 0, Text = "Chọn tỉnh, thành phố" }); if (Condition.CityId > 0) { model.ListDistrict = placeService.ListPlaceItemByParent(Condition.CityId); } else { model.ListDistrict = new List <Entities.Item>(); } model.ListDistrict.Insert(0, new Entities.Item() { Id = 0, Text = "Chọn quận huyện" }); model.Condition = Condition; Paging(Condition.Page, totalRecord); return(View(model)); }
//選取多個region(縣市) public void SelectMultiRegion_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Region.Add(Helper.GetLocationIdByName("台北市")); searchCondition.Region.Add(Helper.GetLocationIdByName("新北市")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count == 2); }
//只有選擇捷運站 public void OnlyChooseMrtCoods() { var searchCondition = new RegionCondition(); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("鳳山國中")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count == 1); Assert.IsTrue(result.First(x => x.txt == "高雄市").mrt.mrtline.First().station.First().name == "鳳山國中"); }
//只有選擇鄉鎮 public void OnlyChooseSection() { var searchCondition = new RegionCondition(); searchCondition.Section.Add(Helper.GetLocationIdByName("國姓鄉")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count == 1); Assert.IsTrue(result.First(x => x.txt == "南投縣").section.First().name == "國姓鄉"); }
//如果鄉鎮不在該縣市底下,會選擇該縣市及該鄉鎮 public void CrossRegionSection_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Region.Add(Helper.GetLocationIdByName("高雄市")); searchCondition.Section.Add(Helper.GetLocationIdByName("安平區")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count == 2); Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 0); Assert.IsTrue(result.First(x => x.txt == "台南市").section.Count == 1); }
//只選一個縣市 public void OnlySelectRegion_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Region.Add(Helper.GetLocationIdByName("台北市")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.First().txt == "台北市"); // var urlResult = generator.GenerateUrlBySearchModel(searchCondition); // Assert.IsTrue(urlResult.Count>1); }
//捷運線不在縣市底下, 會略過 public void CrossRegionMrtLine_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Region.Add(Helper.GetLocationIdByName("台北市")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("凱旋")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("三多商圈")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count == 2); Assert.IsTrue(result.First(x => x.txt == "台北市").mrt == null); Assert.IsTrue(result.First(x => x.txt == "高雄市").mrt.mrtline.First().name == "紅線"); }
public void SelectRegionAndMrtLineAndMrtCoods_Expect_Success() { var searchCondition = new RegionCondition(); //紅線底下的捷運站 searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("高雄國際機場")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("凱旋")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("三多商圈")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.First().txt == "高雄市"); Assert.IsTrue(result.First().mrt.mrtline.First().station.Count == 3); }
//如果該region底下沒東西,也要組出url //如果有選捷運,依據捷運線所屬哪個捷運,組出mrt參數(對應到region 桃捷=6 北捷=1 高雄捷運=17) public List <string> GenerateUrlBySearchModel(RegionCondition regionCondition) { var conditionQueryString = new List <string>(); //依據region,將搜尋條件group by var conditionList = ConvertFilterConditionToRegionList(regionCondition); //loop每個縣市 foreach (var region in conditionList) { var regionQs = $"region={region.id}"; //loop每個租屋類型 foreach (var kind in regionCondition.kind) { var kindQs = $"kind={kind}"; if (region.section.Any()) { var sectionQs = regionQs + "&" + kindQs + "&" + $"section={String.Join(",", region.section.Select(x => x.id))}"; conditionQueryString.Add(sectionQs); } //如果這縣市有捷運 if (region.mrt != null) { var mrtQs = $"MrtRegionId={region.mrt.MrtRegionId}"; foreach (var mrtline in region.mrt.mrtline) { var mrtlineQs = $"mrtline={mrtline.sid}"; var mrtStaionQs = regionQs + "&" + kindQs + "&" + mrtQs + "&" + mrtlineQs + "&" + $"section={String.Join(",", mrtline.station.Select(x => x.nid))}"; conditionQueryString.Add(mrtStaionQs); } } if (region.section.Count == 0 && (region.mrt == null || region.mrt.mrtline.Count == 0)) { //組出region的url region + kind conditionQueryString.Add(regionQs + "&" + kindQs); } } } return(conditionQueryString); }
//測試跨捷運線的捷運站 public void CrossMrtLineStation_Expect_Success() { var searchCondition = new RegionCondition(); //台北市 searchCondition.Region.Add(Helper.GetLocationIdByName("台北市")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("南港展覽館")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("大湖公園")); searchCondition.mrtcoods.Add(Helper.GetMrtIdByName("台北小巨蛋")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count > 0); Assert.IsTrue(result.First().mrt.mrtline.First(x => x.name == "文湖線").station.Count == 2); Assert.IsTrue(result.First().mrt.mrtline.First(x => x.name == "松山新店線").station.Count == 1); }
//選取多個鄉鎮 public void SelectMultipleSection_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Section.Add(Helper.GetLocationIdByName("旗津區")); searchCondition.Section.Add(Helper.GetLocationIdByName("鳳山區")); searchCondition.Section.Add(Helper.GetLocationIdByName("銅鑼鄉")); searchCondition.Section.Add(Helper.GetLocationIdByName("東勢區")); searchCondition.Section.Add(Helper.GetLocationIdByName("霧峰區")); searchCondition.Section.Add(Helper.GetLocationIdByName("烏日區")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count > 0); Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 2); Assert.IsTrue(result.First(x => x.txt == "苗栗縣").section.Count == 1); Assert.IsTrue(result.First(x => x.txt == "台中市").section.Count == 3); }
//選取多個縣市及底下的鄉鎮 public void SelectRegionsAndSection_Expect_Success() { var searchCondition = new RegionCondition(); searchCondition.Region.Add(Helper.GetLocationIdByName("高雄市")); searchCondition.Section.Add(Helper.GetLocationIdByName("鼓山區")); searchCondition.Section.Add(Helper.GetLocationIdByName("楠梓區")); searchCondition.Region.Add(Helper.GetLocationIdByName("南投縣")); searchCondition.Section.Add(Helper.GetLocationIdByName("埔里鎮")); searchCondition.Section.Add(Helper.GetLocationIdByName("中寮鄉")); searchCondition.Section.Add(Helper.GetLocationIdByName("仁愛鄉")); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); Assert.IsTrue(result.Count > 0); Assert.IsTrue(result.First(x => x.txt == "高雄市").section.Count == 2); Assert.IsTrue(result.First(x => x.txt == "南投縣").section.Count == 3); }
public void NoSelectRegion_Mrt_Section_Expect_Exception() { var searchCondition = new RegionCondition(); var generator = new UrlGenerator(); var result = generator.ConvertFilterConditionToRegionList(searchCondition); }
public List <Region> ConvertFilterConditionToRegionList(RegionCondition condition) { //取出region跟mrt對照表 var locationEntity = LocationJson.GetInstance(); if (condition.Region.Count == 0 && condition.mrtcoods.Count == 0 && condition.Section.Count == 0) { throw new InvalidSettingException("Please choose Region or MrtCoods or Section in settings.conf"); } //取出所選擇的縣市 var regionList = locationEntity.regionEntity.region .ToList() .DeepClone <List <Region> >(); for (int i = regionList.Count - 1; i >= 0; i--) { var currentRegion = regionList[i]; //如果搜尋條件有指定此縣市底下的鄉鎮 if (condition.Section.Intersect(currentRegion.section.Select(x => x.id)).Any()) { //移除其他沒被指定到的鄉鎮 currentRegion.section.RemoveAll(x => !condition.Section.Contains(x.id)); } else { //如果沒指定代表全選,刪掉所有鄉鎮,這樣才不會loop到 currentRegion.section.Clear(); } //如果這縣市有捷運 再做捷運站判斷 if (currentRegion.mrt != null) { if (condition.mrtcoods.Count > 0) { //loop每個捷運線 for (int k = currentRegion.mrt.mrtline.Count - 1; k >= 0; k--) { //如果有選擇此捷運線的捷運站,刪掉其他沒選擇到的捷運站 var currentMrtLine = currentRegion.mrt.mrtline[k]; if (condition.mrtcoods.Intersect(currentMrtLine.station.Select(x => x.nid)).Any()) { currentMrtLine.station.RemoveAll(x => !condition.mrtcoods.Contains(x.nid)); } else { //刪掉此捷運線 currentRegion.mrt.mrtline.Remove(currentMrtLine); } } //代表選擇的捷運站不在此捷運底下 if (currentRegion.mrt.mrtline.Count == 0) { currentRegion.mrt = null; } } else { //沒選捷運站 直接拿掉此region的捷運 currentRegion.mrt = null; } } //如果沒有選擇此region,又沒有選在這region底下的捷運或鄉鎮,就刪掉這個region if (currentRegion.section.Count == 0 && currentRegion.mrt == null && !condition.Region.Contains(currentRegion.id)) { regionList.Remove(currentRegion); } } return(regionList); }