// 航假/小三通班次時刻表 public static List <TrafficTimeTableModel> GetApkgTimeTable(BookingModel booking, List <TrafficSectorCostModel> sectors) { List <TrafficTimeTableModel> time_table = new List <TrafficTimeTableModel>(); try { DateTime s_date = booking.S_DATE; foreach (var sec_item in sectors) { //成本與搭乘限制 DataSet dtl_ds = LimitDAL.GetTrafficCostDtl(sec_item.TRAFFIC_COST_PRICE_XID, sec_item.TRAFFIC_XID, sec_item.TRAFFIC_COST_XID, s_date.ToString("yyyyMMdd")); //所有交通班次 DataSet time_ds = TrainDAL.GetTimeTable(booking.Product.PROD_NO, s_date.ToString("yyyyMMdd"), sec_item.FORWARD_FLAG, sec_item.DEP_FROM, sec_item.ARR_TO); foreach (DataRow dr in time_ds.Tables[0].Rows) { bool chk = false; //過濾交通限制 if (dtl_ds.Tables[0].Rows.Count != 0) { chk = FilterTraffic(s_date, dr.ToStringEx("S_TIME"), dr.ToStringEx("FLY_NO"), sec_item, dtl_ds.Tables[0]); } else { chk = true; } //沒有限制 //通過過濾規則放入時刻表 if (chk) { time_table.Add(new TrafficTimeTableModel() { S_DATE = s_date.AddDays(sec_item.ADD_DAY), FLY_NO = dr.ToStringEx("FLY_NO"), FORWARD_FLAG = sec_item.FORWARD_FLAG, SECTOR = sec_item.SECTOR, DEP_FROM = dr.ToStringEx("DEP_FROM"), DEP_FROM_NAME = dr.ToStringEx("DEP_FROM_NAME"), ARR_TO = dr.ToStringEx("ARR_TO"), ARR_TO_NAME = dr.ToStringEx("ARR_TO_NAME"), DEP_FROM_TIME = dr.ToStringEx("S_TIME").Insert(2, ":"), ARR_TO_TIME = dr.ToStringEx("E_TIME").Insert(2, ":"), SEAT_COUNT = dr.ToStringEx("QTY_KK") }); } } } } catch (Exception ex) { Website.Instance.logger.FatalFormat("{0},{1}", ex.Message, ex.StackTrace); } return(time_table); }
// 查詢系統已設置航班時刻 public static List <TrafficTimeTableModel> QueryTimeTable(string prod_no, DateTime s_date, DateTime?e_date, List <TrafficSectorCostModel> sectors) { List <TrafficTimeTableModel> time_tables = new List <TrafficTimeTableModel>(); try { if (sectors.Count() < 1) { return(time_tables); } foreach (var sec_item in sectors) { //成本與搭乘限制 DataSet dtl_ds = LimitDAL.GetTrafficCostDtl(sec_item.TRAFFIC_COST_PRICE_XID, sec_item.TRAFFIC_XID, sec_item.TRAFFIC_COST_XID, s_date.ToString("yyyyMMdd")); // 確認最後使用出發日 DateTime dept_date = s_date.AddDays(sec_item.ACCUM_ADD_DAY); //所有航段班次 DataSet time_ds = (sec_item.TRAFFIC_TYPE == "0002") ? // 除高鐵外, 其它依系統指定 ThsrDAL.GetTimeTable(prod_no, dept_date.ToString("yyyyMMdd"), sec_item.FORWARD_FLAG, sec_item.DEP_FROM, sec_item.ARR_TO) : TrainDAL.GetTimeTable(prod_no, // 除航假只給 s_date 外, 其它一律會帶 s_date 與 e_date (sec_item.FORWARD_FLAG == "1" ? dept_date : (e_date.HasValue ? e_date.Value.AddDays(sec_item.ACCUM_ADD_DAY) : s_date)).ToString("yyyyMMdd"), sec_item.FORWARD_FLAG, sec_item.DEP_FROM, sec_item.ARR_TO); foreach (DataRow dr in time_ds.Tables[0].Rows) { bool chk = false; //過濾交通限制 if (dtl_ds.Tables[0].Rows.Count != 0) { chk = (sec_item.TRAFFIC_TYPE == "0002") ? FilterTraffic(s_date, dr.ToStringEx("DEP_TIME"), dr.ToStringEx("TRAIN"), sec_item, dtl_ds.Tables[0]) : FilterTraffic(s_date, dr.ToStringEx("S_TIME"), dr.ToStringEx("FLY_NO"), sec_item, dtl_ds.Tables[0]); } else { chk = true; } //沒有限制 //通過過濾規則放入時刻表 if (chk) { DateTime work_date = sec_item.FORWARD_FLAG.Equals("1") ? s_date : ((e_date.HasValue) ? e_date.Value : s_date); if (sec_item.TRAFFIC_TYPE == "0002") { time_tables.Add(new TrafficTimeTableModel() { S_DATE = s_date.AddDays(sec_item.ADD_DAY), FLY_NO = dr.ToStringEx("TRAIN"), FORWARD_FLAG = sec_item.FORWARD_FLAG, SECTOR = sec_item.SECTOR, DEP_FROM = dr.ToStringEx("DEP_STATION_NO"), DEP_FROM_NAME = dr.ToStringEx("DEP_STATION_NAME"), ARR_TO = dr.ToStringEx("ARR_STATION_NO"), ARR_TO_NAME = dr.ToStringEx("ARR_STATION_NAME"), DEP_FROM_TIME = dr.ToStringEx("DEP_TIME").Insert(2, ":"), ARR_TO_TIME = dr.ToStringEx("ARR_TIME").Insert(2, ":"), SEAT_COUNT = dr.ToStringEx("QTY_KK"), CAN_HL = sec_item.FLY_HL_FLAG.Equals("1") ? true : false, CARRIER_CODE = sec_item.CARRIER_CODE, CARRIER_NAME = sec_item.CARRIER_CODE_NAME, TOKEN_DATA = string.Format("{0:yyyyMMdd},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", work_date.AddDays(sec_item.ACCUM_ADD_DAY), sec_item.FORWARD_FLAG, sec_item.TRAFFIC_XID, sec_item.TRAFFIC_COST_XID, sec_item.DEP_FROM, sec_item.ARR_TO, dr.ToStringEx("TRAIN"), dr.ToStringEx("DEP_TIME").Insert(2, ":"), dr.ToStringEx("ARR_TIME").Insert(2, ":"), dr.ToStringEx("QTY_KK"), "", "") }); } else { time_tables.Add(new TrafficTimeTableModel() { S_DATE = s_date.AddDays(sec_item.ADD_DAY), FLY_NO = dr.ToStringEx("FLY_NO"), FORWARD_FLAG = sec_item.FORWARD_FLAG, SECTOR = sec_item.SECTOR, DEP_FROM = dr.ToStringEx("DEP_FROM"), DEP_FROM_NAME = dr.ToStringEx("DEP_FROM_NAME"), ARR_TO = dr.ToStringEx("ARR_TO"), ARR_TO_NAME = dr.ToStringEx("ARR_TO_NAME"), DEP_FROM_TIME = dr.ToStringEx("S_TIME").Insert(2, ":"), ARR_TO_TIME = dr.ToStringEx("E_TIME").Insert(2, ":"), SEAT_COUNT = dr.ToStringEx("QTY_KK"), CAN_HL = sec_item.FLY_HL_FLAG.Equals("1") ? true : false, CARRIER_CODE = sec_item.CARRIER_CODE, CARRIER_NAME = (sec_item.TRAFFIC_TYPE == "0003") ? sec_item.CARRIER_NAME : string.Format("{0},{1},{2}艙", sec_item.CARRIER_CODE, sec_item.CARRIER_NAME, sec_item.BOOKING_CLASS), TOKEN_DATA = string.Format("{0:yyyyMMdd},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", work_date.AddDays(sec_item.ACCUM_ADD_DAY), sec_item.FORWARD_FLAG, sec_item.TRAFFIC_XID, sec_item.TRAFFIC_COST_XID, sec_item.DEP_FROM, sec_item.ARR_TO, dr.ToStringEx("FLY_NO"), dr.ToStringEx("S_TIME").Insert(2, ":"), dr.ToStringEx("E_TIME").Insert(2, ":"), dr.ToStringEx("QTY_KK"), "", "") }); } } } } } catch (Exception ex) { throw ex; } return(time_tables); }