Beispiel #1
0
        // 航假/小三通班次時刻表
        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);
        }
Beispiel #2
0
        // 查詢系統已設置航班時刻
        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);
        }