static void Main(string[] args)
        {
            //Generate new route with each run if route doesn't exist so debugging is consistent between users
            string RouteName = "TestRoute1"; //This is what we decide to call a specific route. It is a folder containing track.txt and route.txt

            if (!Directory.Exists(Environment.CurrentDirectory + "/" + RouteName))
            {
                List <Location> destinationsToGenerateRoute = new List <Location>()
                {
                    new Location("2021/03/08 15:30", "Göteborg"),
                    new Location("2021/03/08 15:52", "Alingsås"),
                    new Location("2021/03/08 16:23", "Vårgårda"),
                    new Location("2021/03/08 17:42", "Herrljunga"),
                    new Location("2021/03/08 18:50", "Falköping"),
                    new Location("2021/03/08 19:30", "Stockholm")
                };
                GenerateRoute(RouteName, destinationsToGenerateRoute);
            }
            var      destinations = TrainSchedule.ParseRoute(RouteName); //Here we put the RouteName
            ITrackIO trackIO      = new TrackIO(RouteName);              //Here we put the RouteName

            Train[] trains = Train.Parse("trains.txt");
            trackIO.Parse();

            ITrainSimulation simulation = new TrainSimulation(175, trackIO).AddDestinations(destinations).AddTrain(trains[0]);

            simulation.Start();

            //trains[0] because we only have one train at the moment. But trains.txt can and will contain multiple ones.
        }
Exemple #2
0
        public async Task <IActionResult> PutTrainSchedule([FromRoute] int id, [FromBody] TrainSchedule trainSchedule)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != trainSchedule.Id)
            {
                return(BadRequest());
            }

            _context.Entry(trainSchedule).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TrainScheduleExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Exemple #3
0
        //First you need to create a route that have a parse error in the route.txt file
        public void ParseDestinationsWithError()
        {
            Action    actionResult   = () => TrainSchedule.ParseRoute("TestRoute1", true);
            Exception exeptionResult = Assert.Throws <Exception>(actionResult);

            Assert.Equal("Something was wrong with the devider charecter", exeptionResult.Message);
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,DepartureTime,Destination,DistanceKm")] TrainSchedule trainSchedule)
        {
            if (id != trainSchedule.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(trainSchedule);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TrainScheduleExists(trainSchedule.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(trainSchedule));
        }
Exemple #5
0
        public ActionResult DeleteConfirmed(int id)
        {
            TrainSchedule trainSchedule = db.TrainSchedule.Find(id);

            db.TrainSchedule.Remove(trainSchedule);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemple #6
0
 public ActionResult Edit([Bind(Include = "Id,TrainId,Stop,ArrivalTime")] TrainSchedule trainSchedule)
 {
     if (ModelState.IsValid)
     {
         db.Entry(trainSchedule).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(trainSchedule));
 }
Exemple #7
0
        public ActionResult Create([Bind(Include = "Id,TrainId,Stop,ArrivalTime")] TrainSchedule trainSchedule)
        {
            if (ModelState.IsValid)
            {
                db.TrainSchedules.Add(trainSchedule);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(trainSchedule));
        }
Exemple #8
0
        private Train GenerateSapsan758()
        {
            var train = new Train
            {
                Number = "758*Н",
                Name   = "Сапсан"
            };

            var trainSchedule = new TrainSchedule
            {
                FromDate = new DateTime(2019, 1, 7),
                ToDate   = new DateTime(2019, 4, 6),
                Route    = new Route
                {
                    StartTime = new TimeSpan(5, 5, 0)
                },
                Schedule = new DailySchedule(new DateTime(2019, 1, 7), 1)
            };

            var trainRoute = new List <RoutePoint> {
                new RoutePoint {
                    FromStartTime = new TimeSpan(), Station = ННовгород
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(0, 23, 0), Station = Дзержинск
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(1, 59, 0), Station = Владимир
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(4, 13, 0), Station = Москва
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(5, 25, 0), Station = Тверь
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(6, 40, 0), Station = Окуловка
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(7, 22, 0), Station = Чудово
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(8, 15, 0), Station = СПетербур
                }
            };

            trainRoute.ForEach(e => trainSchedule.Route.Points.Add(e));

            GenerateSapsanCars(trainRoute).ForEach(e => trainSchedule.TrainCars.Add(e));

            train.TrainSchedules.Add(trainSchedule);

            return(train);
        }
        public async Task <IActionResult> Create([Bind("Id,DepartureTime,Destination,DistanceKm")] TrainSchedule trainSchedule)
        {
            if (ModelState.IsValid)
            {
                _context.Add(trainSchedule);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(trainSchedule));
        }
Exemple #10
0
 public ActionResult Edit([Bind(Include = "Id,Start_Station,Destination_Station,Arrival_Time,Departure_Time,Distance_Between,Train_Id")] TrainSchedule trainSchedule)
 {
     if (ModelState.IsValid)
     {
         db.Entry(trainSchedule).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.Train_Id = new SelectList(db.TrainDetail, "Id", "TrainName", trainSchedule.Train_Id);
     return(View(trainSchedule));
 }
Exemple #11
0
        public async Task <IActionResult> PostTrainSchedule([FromBody] TrainSchedule trainSchedule)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.Schedules.Add(trainSchedule);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTrainSchedule", new { id = trainSchedule.Id }, trainSchedule));
        }
Exemple #12
0
        // GET: TrainSchedule/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TrainSchedule trainSchedule = db.TrainSchedule.Find(id);

            if (trainSchedule == null)
            {
                return(HttpNotFound());
            }
            return(View(trainSchedule));
        }
Exemple #13
0
        // GET: TrainSchedule/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TrainSchedule trainSchedule = db.TrainSchedule.Find(id);

            if (trainSchedule == null)
            {
                return(HttpNotFound());
            }
            ViewBag.Train_Id = new SelectList(db.TrainDetail, "Id", "TrainName", trainSchedule.Train_Id);
            return(View(trainSchedule));
        }
Exemple #14
0
        // Map StationDbContext object to Station object
        public Station MapStationDBToStation(StationDbContext StationDB)
        {
            using (var db = new DB())
            {
                List <TrainSchedule> TrainSchedules = new List <TrainSchedule>();

                foreach (var ts in StationDB.TrainSchedules)
                {
                    var OneTrainScheduleStation = new Station
                    {
                        StationID   = ts.StationID,
                        StationName = ts.Station.StationName,
                    };

                    var OneTrain = new Train
                    {
                        TrainID = ts.TrainID,
                    };

                    var OneTrainSchedule = new TrainSchedule
                    {
                        StationID        = ts.StationID,
                        TrainID          = ts.TrainID,
                        Station          = OneTrainScheduleStation,
                        Train            = OneTrain,
                        TrainArrivalTime = ts.TrainArrivalTime
                    };

                    TrainSchedules.Add(OneTrainSchedule);
                }


                var OneStation = new Station
                {
                    StationID      = StationDB.StationID,
                    StationName    = StationDB.StationName,
                    TrainSchedules = TrainSchedules
                };

                return(OneStation);
            }
        }
Exemple #15
0
        private Train GenerateNevskiy747()
        {
            var train = new Train
            {
                Number = "747А",
                Name   = "Невский экспресс"
            };

            var trainSchedule = new TrainSchedule
            {
                FromDate = new DateTime(2019, 1, 7),
                ToDate   = new DateTime(2019, 4, 5),
                Route    = new Route
                {
                    StartTime = new TimeSpan(13, 10, 0)
                },
                Schedule = new WeeklySchedule(new DateTime(2019, 1, 7), new[] {
                    DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday,
                    DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Sunday
                })
            };

            trainSchedule.Schedule.IncludedDates.Add(new DateTime(2019, 3, 9));
            trainSchedule.Schedule.ExcludedDates.Add(new DateTime(2019, 3, 8));

            var trainRoute = new List <RoutePoint> {
                new RoutePoint {
                    FromStartTime = new TimeSpan(), Station = СПетербур
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(4, 5, 0), Station = Москва
                }
            };

            trainRoute.ForEach(e => trainSchedule.Route.Points.Add(e));

            GenerateNevskiyCars(trainRoute).ForEach(e => trainSchedule.TrainCars.Add(e));

            train.TrainSchedules.Add(trainSchedule);

            return(train);
        }
Exemple #16
0
 public void isAuto(Boolean mode)
 {
     if (mode)
     {
         autoMode          = true;
         label18.Text      = "Fixed Block";
         label18.ForeColor = System.Drawing.Color.Lime;
         trainSchedule     = new TrainSchedule();
         timeStart         = trainSchedule.getStart();
         timeEnd           = trainSchedule.getEnd();
         driverSchedule    = new DriverSchedule(timeStart, timeEnd);
         MessageBox.Show("Please set up appropriate files and parameters then click okay.");
         dispatchTrain();
     }
     else
     {
         autoMode          = false;
         label18.Text      = "Inactive";
         label18.ForeColor = System.Drawing.Color.Red;
     }
 }
Exemple #17
0
        /// <summary>
        /// 作者:Kylin
        /// 时间:2015.01.05
        /// 描述: check update training schedule for speaker is validate
        /// </summary>
        /// <param name="trainSchedule"></param>
        /// <param name="checkEnable"></param>
        /// <returns></returns>
        public static int CheckTrainingScheduleIsValidate(TrainSchedule trainSchedule, bool checkEnable)
        {
            using (var edb = new EmeEntities())
            {
                if (!checkEnable)
                {
                    if (
                edb.UserSchedule.Any(
                    p => p.BeginTime < trainSchedule.EndTime && p.EndTime > trainSchedule.BeginTime
                         && p.Status == ConvertEnum.StatusTypeForActive
                         && p.UserId == trainSchedule.SpeakerId))
                    {
                        return 101; //已存在其他安排
                    }
                    if (
                        edb.TrainSchedule.Any(
                            p => p.BeginTime < trainSchedule.EndTime && p.EndTime > trainSchedule.BeginTime
                                 && p.SpeakerId == trainSchedule.SpeakerId &&
                                 p.Status == ConvertEnum.StatusTypeForActive))
                    {
                        return 103; //已存在其他培训
                    }
                    if (edb.TrainRecord.Any(p =>
                        p.TrainSchedule.BeginTime < trainSchedule.EndTime &&
                        p.TrainSchedule.EndTime > trainSchedule.BeginTime
                        && p.Status == ConvertEnum.StatusTypeForActive
                        && p.UserId == trainSchedule.SpeakerId))
                    {
                        return 104; //主讲人已预订其他培训
                    }
                }
                else
                {
                    return 0;
                }

            }

            return -1;
        }
Exemple #18
0
        private Train GenerateMegapolis019()
        {
            var train = new Train
            {
                Number = "019У",
                Name   = "Мегаполис"
            };

            var trainSchedule = new TrainSchedule
            {
                FromDate = new DateTime(2019, 1, 1),
                ToDate   = new DateTime(2019, 3, 28),
                Route    = new Route
                {
                    StartTime = new TimeSpan(22, 29, 0)
                },
                Schedule = new DailySchedule(new DateTime(2019, 1, 1), 1)
            };

            var trainRoute = new List <RoutePoint> {
                new RoutePoint {
                    FromStartTime = new TimeSpan(), Station = СПетербур
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(5, 33, 0), Station = Тверь
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(7, 28, 0), Station = Москва
                }
            };

            trainRoute.ForEach(e => trainSchedule.Route.Points.Add(e));

            GenerateMegapolisCars(trainRoute).ForEach(e => trainSchedule.TrainCars.Add(e));

            train.TrainSchedules.Add(trainSchedule);

            return(train);
        }
Exemple #19
0
        private Train GenerateNevskiy748()
        {
            var train = new Train
            {
                Number = "748А",
                Name   = "Невский экспресс"
            };

            var trainSchedule = new TrainSchedule
            {
                FromDate = new DateTime(2019, 1, 10),
                ToDate   = new DateTime(2019, 4, 7),
                Route    = new Route
                {
                    StartTime = new TimeSpan(13, 40, 0)
                },
                Schedule = new DailySchedule(new DateTime(2019, 1, 10), 1)
            };

            trainSchedule.Schedule.ExcludedDates.Add(new DateTime(2019, 3, 9));

            var trainRoute = new List <RoutePoint> {
                new RoutePoint {
                    FromStartTime = new TimeSpan(), Station = Москва
                },
                new RoutePoint {
                    FromStartTime = new TimeSpan(4, 5, 0), Station = СПетербур
                }
            };

            trainRoute.ForEach(e => trainSchedule.Route.Points.Add(e));

            GenerateNevskiyCars(trainRoute).ForEach(e => trainSchedule.TrainCars.Add(e));

            train.TrainSchedules.Add(trainSchedule);

            return(train);
        }
Exemple #20
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var n         = inputStream.ReadInt();
            var schedules = new TrainSchedule[n - 1];

            for (int i = 0; i < schedules.Length; i++)
            {
                var csf = inputStream.ReadIntArray();
                schedules[i] = new TrainSchedule(csf[0], csf[1], csf[2]);
            }

            for (int startStation = 0; startStation < schedules.Length; startStation++)
            {
                var currentTime = 0;
                foreach (var schedule in schedules.Skip(startStation))
                {
                    currentTime = schedule.GetNextDepartureTime(currentTime) + schedule.Take;
                }

                yield return(currentTime);
            }

            yield return(0);
        }
Exemple #21
0
        /// <summary>
        /// 作者:Kylin
        /// 时间:2014.04.10
        /// 描述:创建培训计划 (test ing )
        /// </summary>
        /// <param name="trainSchedule"></param>
        /// <param name="trainBranchRights">分配的中心Ids</param>
        /// <param name="createBy"></param>
        /// <returns></returns>
        public static int CreateTrainSchedule(TrainSchedule trainSchedule, string[] trainBranchRights, int createBy)
        {
            using (var edb = new EmeEntities())
            {
                using (var tran = new TransactionScope())
                {
                    try
                    {
                        //针对主讲人生成订课记录
                        var result = 100; //Default Create Result
                        if (trainSchedule.SpeakerId.HasValue)
                        {

                            if (
                                edb.UserSchedule.Any(
                                    p => p.BeginTime < trainSchedule.EndTime && p.EndTime > trainSchedule.BeginTime
                                         && p.Status == ConvertEnum.StatusTypeForActive
                                         && p.UserId == trainSchedule.SpeakerId))
                            {
                                result = 101; //已存在其他安排
                                return result;
                            }
                            if (
                                edb.TrainSchedule.Any(
                                    p => p.BeginTime < trainSchedule.EndTime && p.EndTime > trainSchedule.BeginTime
                                         && p.SpeakerId == trainSchedule.SpeakerId &&
                                         p.Status == ConvertEnum.StatusTypeForActive))
                            {
                                result = 103; //已存在其他培训
                                return result;
                            }
                            if (edb.TrainRecord.Any(p =>
                                p.TrainSchedule.BeginTime < trainSchedule.EndTime &&
                                p.TrainSchedule.EndTime > trainSchedule.BeginTime
                                && p.Status == ConvertEnum.StatusTypeForActive
                                && p.UserId == trainSchedule.SpeakerId))
                            {
                                return 104; //主讲人已预订其他培训
                            }

                            edb.Entry(trainSchedule).State = EntityState.Added;
                            edb.SaveChanges();

                            if (trainBranchRights.Length > 0)
                            {
                                //Create Train Branch Rights
                                foreach (var bId in trainBranchRights.Select(CommonHelper.To<int>))
                                {
                                    if (bId > 0)
                                    {
                                        edb.TrainRights.Add(new TrainRights()
                                        {
                                            BranchId = bId,
                                            TrainScheduleId = trainSchedule.Id,
                                            CreateBy = createBy,
                                            CreateTime = DateTime.Now
                                        });
                                    }
                                }
                            }

                            //当主讲人是老师时直接写入主讲人订课记录,提供老师端登入,并且视为主讲人进入会议平台
                            if (
                                edb.Teacher.Any(
                                    p =>
                                        p.UserId == trainSchedule.SpeakerId &&
                                        p.Status == ConvertEnum.StatusTypeForActive))
                            {
                                if (trainSchedule.SpeakerId != null)
                                {
                                    var model = new TrainRecord()
                                    {
                                        TrainScheduleId = trainSchedule.Id,
                                        UserId = trainSchedule.SpeakerId.Value,
                                        MeetingAttendType = ConvertEnum.MeetingAttendTypeForSpeaker,
                                        IsUnBook = false,
                                        Status = ConvertEnum.StatusTypeForActive,
                                        CreateBy = createBy,
                                        CreateTime = DateTime.Now
                                    };

                                    edb.Entry(model).State = EntityState.Added;
                                }
                            }
                        }

                        //写入任务
                        if (trainSchedule.SpeakerId != null)
                        {
                            var userTaskModel = new UserTask()
                            {
                                IsSystem = true,
                                IsComplete = false,
                                Status = ConvertEnum.StatusTypeForActive,
                                BeginTime = trainSchedule.BeginTime,
                                EndTime = trainSchedule.EndTime,
                                TaskValue = trainSchedule.Id,
                                TaskNum = 1,
                                TaskType = ConvertEnum.TaskTypeForTraining,
                                CreateBy = createBy,
                                CreateTime = DateTime.Now,
                                UserId = trainSchedule.SpeakerId.Value
                            };
                            edb.Entry(userTaskModel).State = EntityState.Added;
                        }
                        result = edb.SaveChanges() > 0 ? 100 : 102; //添加需要指定中心权限
                        tran.Complete();
                        return result;
                    }
                    catch (Exception e)
                    {
                        tran.Dispose();

                        // 异常日志消息队列
                        Common.MSMQ.QueueManager.AddExceptionLog(new ExceptionLogs()
                        {
                            ExceptionType = CommonHelper.To<int>(ExceptionType.Function),
                            Message =
                                string.Format("TrainBLL-CreateTrainSchedule:{0};{1};{2}", e.Message,
                                    e.InnerException.Message, e.HelpLink),
                            IsTreat = false,
                            CreateBy = createBy,
                            CreateTime = DateTime.Now
                        });

                        return 105;
                    }
                }

            }
        }
 public CreateTrainScheduleModel()
 {
     TrainSchedule = new TrainSchedule() { MaxBookNum = 1000, TrainNum = "1" };
 }
Exemple #23
0
        /// <summary>
        /// 作者:Kylin
        /// 时间:2014.04.16
        /// 描述:Update培训计划 
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static bool UpdateTrainSchedule(TrainSchedule model)
        {
            using (var edb = new EmeEntities())
            {
                try
                {
                    var train = edb.TrainSchedule.FirstOrDefault(p => p.Id == model.Id);
                    if (null == train)
                        return false;

                    train.V3TrainId = model.V3TrainId;
                    train.Subject = model.Subject;
                    train.TContent = model.TContent;
                    train.Speaker = model.Speaker;
                    train.SpeakerId = model.SpeakerId;
                    train.TrainNum = model.TrainNum;
                    train.BeginTime = model.BeginTime;
                    train.EndTime = model.EndTime;
                    train.IsBook = model.IsBook;
                    train.IsRights = model.IsRights;
                    train.MaxBookNum = model.MaxBookNum;
                    train.CurrBookNum = model.CurrBookNum;
                    train.MeetingPlatformType = model.MeetingPlatformType;
                    train.MeetingId = model.MeetingId;
                    train.MeetingRoom = model.MeetingRoom;
                    train.Status = model.Status;
                    train.UpdateBy = model.UpdateBy;
                    train.UpdateTime = DateTime.Now;
                    train.Remark = model.Remark;

                    edb.Entry(train).State = EntityState.Modified;
                    return edb.SaveChanges() > 0;
                }
                catch
                {
                    return false;
                }
            }
        }
Exemple #24
0
        /// <summary>
        /// 作者:Kylin
        /// 时间:2014.04.10
        /// 描述:创建培训计划 (test ing )
        /// </summary>
        /// <param name="trainSchedule"></param>
        /// <param name="trainBranchRights">分配的中心Ids</param>
        /// <param name="editSpeaker"></param>
        /// <param name="updateBy"></param>
        /// <returns></returns>
        public static int UpdateTrainSchedule(TrainSchedule trainSchedule, string[] trainBranchRights, int editSpeaker, int updateBy)
        {
            using (var edb = new EmeEntities())
            {
                using (var tran = new TransactionScope())
                {
                    try
                    {
                        //针对主讲人生成订课记录
                        if (trainSchedule.Id <= 0 || !edb.TrainSchedule.Any(p => p.Id == trainSchedule.Id && p.Status == ConvertEnum.StatusTypeForActive))
                        {
                            return 106; // no schedule existed
                        }

                        //check online training is booked for any students
                        if (edb.TrainSchedule.Any(p => p.Id == trainSchedule.Id && p.Status == ConvertEnum.StatusTypeForActive
                            && p.MeetingPlatformType != trainSchedule.MeetingPlatformType
                            && p.TrainRecord.Any(t => t.TrainScheduleId == p.Id && !t.IsUnBook && t.Status == ConvertEnum.StatusTypeForActive && t.UserId != p.SpeakerId)))
                        {
                            return 108; // exist anyone booked this shcedule and try to change online or offline setting
                        }

                        if (trainSchedule.SpeakerId.HasValue)
                        {

                            //Check is validate for speaker
                            var isValidate = CheckTrainingScheduleIsValidate(trainSchedule, trainSchedule.SpeakerId == editSpeaker);
                            if (isValidate > 0)
                            {
                                return isValidate;
                            }

                            //Delete history schedule speaker's schedule and tasks
                            #region update schedule

                            //update主讲人记录
                            var speakerRecords = edb.TrainRecord.Where(p => p.TrainScheduleId == trainSchedule.Id
                           && p.Status == ConvertEnum.StatusTypeForActive
                           && p.UserId == editSpeaker);
                            if (speakerRecords.Any())
                            {
                                foreach (var trainRecord in speakerRecords)
                                {
                                    trainRecord.Status = ConvertEnum.StatusTypeForActive;
                                    trainRecord.UpdateBy = updateBy;
                                    trainRecord.UpdateTime = DateTime.Now;
                                    trainRecord.UserId = (int)trainSchedule.SpeakerId;
                                    edb.Entry(trainRecord).State = EntityState.Modified;
                                }
                            }
                            else
                            {
                                //当主讲人是老师时直接写入主讲人订课记录,提供老师端登入,并且视为主讲人进入会议平台
                                if (
                                    edb.Teacher.Any(
                                        p =>
                                            p.UserId == trainSchedule.SpeakerId &&
                                            p.Status == ConvertEnum.StatusTypeForActive))
                                {
                                    if (trainSchedule.SpeakerId != null)
                                    {
                                        var model = new TrainRecord()
                                        {
                                            TrainScheduleId = trainSchedule.Id,
                                            UserId = trainSchedule.SpeakerId.Value,
                                            MeetingAttendType = ConvertEnum.MeetingAttendTypeForSpeaker,
                                            IsUnBook = false,
                                            Status = ConvertEnum.StatusTypeForActive,
                                            CreateBy = updateBy,
                                            CreateTime = DateTime.Now
                                        };

                                        edb.Entry(model).State = EntityState.Added;
                                    }
                                }
                            }

                            var trainRights = edb.TrainRights.Where(p => p.TrainScheduleId == trainSchedule.Id);

                            foreach (var right in trainRights) //删除历史中心权限
                            {
                                edb.Entry(right).State = EntityState.Deleted;
                            }

                            var trainAttachment = trainSchedule.TrainAttachment;

                            foreach (var attachment in trainAttachment) //删除历史附件
                            {

                                attachment.UpdateBy = updateBy;
                                attachment.UpdateTime = DateTime.Now;
                                attachment.Status = ConvertEnum.StatusTypeForDelete;
                                edb.Entry(attachment).State = EntityState.Modified;
                            }

                            //取消任务
                            var modelUserTaskList = edb.UserTask.Where(p => p.TaskType == ConvertEnum.TaskTypeForTraining
                                && p.TaskValue == trainSchedule.Id
                                && p.BeginTime == trainSchedule.BeginTime
                                && p.EndTime == trainSchedule.EndTime).ToList();
                            foreach (var item in modelUserTaskList)
                            {
                                item.UpdateTime = DateTime.Now;
                                item.UpdateBy = updateBy;
                                item.Status = ConvertEnum.StatusTypeForDelete;
                                edb.Entry(item).State = EntityState.Modified;
                            }

                            #endregion

                            //update Schedule
                            trainSchedule.UpdateBy = updateBy;
                            trainSchedule.UpdateTime = DateTime.Now;
                            edb.Entry(trainSchedule).State = EntityState.Modified;

                            //Create BranchRights
                            if (trainBranchRights.Length > 0)
                            {
                                //Create Train Branch Rights
                                foreach (var bId in trainBranchRights.Select(CommonHelper.To<int>))
                                {
                                    if (bId > 0)
                                    {
                                        edb.TrainRights.Add(new TrainRights()
                                        {
                                            BranchId = bId,
                                            TrainScheduleId = trainSchedule.Id,
                                            CreateBy = updateBy,
                                            CreateTime = DateTime.Now
                                        });
                                    }
                                }
                            }

                            //写入任务
                            if (trainSchedule.SpeakerId != null)
                            {
                                var userTaskModel = new UserTask()
                                {
                                    IsSystem = true,
                                    IsComplete = false,
                                    Status = ConvertEnum.StatusTypeForActive,
                                    BeginTime = trainSchedule.BeginTime,
                                    EndTime = trainSchedule.EndTime,
                                    TaskValue = trainSchedule.Id,
                                    TaskNum = 1,
                                    TaskType = ConvertEnum.TaskTypeForTraining,
                                    CreateBy = updateBy,
                                    CreateTime = DateTime.Now,
                                    UserId = trainSchedule.SpeakerId.Value
                                };
                                edb.Entry(userTaskModel).State = EntityState.Added;
                            }
                            var result = edb.SaveChanges() > 0 ? 100 : 102; //添加需要指定中心权限
                            tran.Complete();
                            return result;
                        }
                        else
                        {
                            return 107;//speaker not exists
                        }
                    }
                    catch (Exception e)
                    {
                        tran.Dispose();

                        // 异常日志消息队列
                        Common.MSMQ.QueueManager.AddExceptionLog(new ExceptionLogs()
                        {
                            ExceptionType = CommonHelper.To<int>(ExceptionType.Function),
                            Message =
                                string.Format("TrainBLL-UpdateTrainSchedule:{0};{1};{2}", e.Message,
                                    e.InnerException.Message, e.HelpLink),
                            IsTreat = false,
                            CreateBy = updateBy,
                            CreateTime = DateTime.Now
                        });

                        return 105;
                    }
                }

            }
        }
 //Let's not move this because this is just for user-debugging and has no connection to the API itself
 public static void GenerateRoute(string safeFileName, List <Location> destinations)
 {
     TrainSchedule.SaveRoute(destinations, safeFileName);
     TrackIO.ExportTrack("[A]------[B]----[C]---[D]---=--[E]---[F]", safeFileName);
 }
Exemple #26
0
        // Map a RouteDBContext object to Route object.
        public Route MapRouteDBToRoute(RouteDbContext RouteDB)
        {
            using (var db = new DB())
            {
                List <Station> RouteStations = new List <Station>();

                foreach (var s in RouteDB.RouteStations)
                {
                    List <TrainSchedule> TrainSchedules = new List <TrainSchedule>();

                    foreach (var ts in s.TrainSchedules)
                    {
                        var OneStation = new Station
                        {
                            StationID   = ts.StationID,
                            StationName = ts.Station.StationName,
                        };

                        var OneTrain = new Train
                        {
                            TrainID = ts.TrainID,
                        };

                        var OneTrainSchedule = new TrainSchedule
                        {
                            StationID        = ts.StationID,
                            TrainID          = ts.TrainID,
                            Station          = OneStation,
                            Train            = OneTrain,
                            TrainArrivalTime = ts.TrainArrivalTime
                        };

                        TrainSchedules.Add(OneTrainSchedule);
                    }


                    var OtherStation = new Station
                    {
                        StationName    = s.StationName,
                        TrainSchedules = TrainSchedules
                    };



                    RouteStations.Add(OtherStation);
                }

                List <Train> RouteTrains = new List <Train>();


                foreach (var t in RouteDB.RouteTrains)
                {
                    var OneTrain = new Train
                    {
                        TrainID = t.TrainID
                    };
                    RouteTrains.Add(OneTrain);
                }


                var OneRoute = new Route
                {
                    RouteID       = RouteDB.RouteID,
                    RouteLength   = RouteDB.RouteLength,
                    RouteStations = RouteStations,
                    RouteTrains   = RouteTrains
                };


                return(OneRoute);
            }
        }
Exemple #27
0
 private void createTrainSchedule()
 {
     trainSchedule = new TrainSchedule();
     MessageBox.Show("Please set up appropriate files and parameters then click okay.");
     dispatchTrain();
 }