Пример #1
0
        public void EnterExam(ExamMessage message)
        {
            ProjectThrough entity = new ProjectThrough();
            //这些都需要加上非空判断
            var examRecord = GetExamRecord(message.GUID);

            if (examRecord == null)
            {
                //需要依赖注入ILogger;
                return;
            }
            entity.ExamRecordId     = examRecord.Id;
            entity.ExamItemItemCode = GetExamItem(message.ExamItem).ItemCode;
            entity.EnterTime        = message.SendTime;
            entity.CreateTime       = DateTime.Now;
            projectThroughRepository.AddEntity(entity);


            var parentCode = GetParentItemCode(message.ExamItem);

            if (parentCode > 0)
            {
                entity = GetProjectThroughs(examRecord.Id, (ExamItemEnum)parentCode);
                if (entity == null)
                {
                    return;
                }
                entity.LeaveTime    = message.SendTime;
                entity.ModifiedTime = DateTime.Now;
                //更新离开时间
                projectThroughRepository.UpdateEntity(entity);
            }
        }
Пример #2
0
        /// <summary>
        /// 如果是通过项目
        /// </summary>
        /// <param name="cmdType"></param>
        public void SendMessage(CmdTypeEnum cmdType, ExamItemEnum ExamItem = ExamItemEnum.CommonExamItem, DeductionRule rule = null)
        {
            if (CurrentExamCar == null)
            {
                MessageBox.Show("请分配考生", "监考大厅");
                return;
            }
            ExamMessage message = new ExamMessage();

            message.ExamStudent = CurrentExamCar.ExamStudent;

            message.SendTime = DateTime.Now;
            message.CmdType  = cmdType;
            message.ExamItem = ExamItem;

            if (message.CmdType == CmdTypeEnum.BreakeRule)
            {
                //发送扣分
                message.DeductionRule                = new ExamMessageDeductionRule();
                message.DeductionRule.ExamItemId     = rule.ExamItemId;
                message.DeductionRule.RuleCode       = rule.RuleCode;
                message.DeductionRule.RuleName       = rule.RuleName;
                message.DeductionRule.ExamItemName   = rule.ExamItemName;
                message.DeductionRule.SubRuleCode    = rule.SubRuleCode;
                message.DeductionRule.DeductedScores = rule.DeductedScores;
            }
            // message.DeductionRule = rule;

            var msg = JsonConvert.SerializeObject(message);

            //消息以Upd的行驶发出去
            udpServer.Send(msg, CurrentExamCar.Ip, CurrentExamCar.Port);
        }
Пример #3
0
        /// <summary>
        /// 结束考试
        /// </summary>
        /// <param name="message"></param>
        public void EndExam(ExamMessage message)
        {
            var entity = GetExamRecord(message.GUID);

            entity.EndTime      = message.SendTime;
            entity.Score        = message.Score;
            entity.ModifiedTime = DateTime.Now;
            examRecordRepository.UpdateEntity(entity);
        }
Пример #4
0
        //初始化加载所有绑定车辆以前绑定的考试
        public void OnExamMessage(ExamMessage message)
        {
            var control = GetCarExamControl(message.ExamStudent.IdCard);

            if (control != null)
            {
                control.updateExamMessage(message);
            }
        }
Пример #5
0
        /// <summary>
        /// todo:延迟加载不行 这个还需要研究
        /// 添加考试信息 考试所有信息
        /// </summary>
        /// <param name="message"></param>
        public void AddExamInfo(ExamMessage message)
        {
            try
            {
                var result = VaildMessage(message);
                if (result == false)
                {
                    return;
                }
                switch (message.CmdType)
                {
                case CmdTypeEnum.StartExam:
                    StartExam(message);
                    break;

                case CmdTypeEnum.EndExam:
                    EndExam(message);
                    break;

                case CmdTypeEnum.BreakeRule:
                    BreakeRule(message);
                    break;

                case CmdTypeEnum.Capture:
                    Capture(message);
                    break;

                case CmdTypeEnum.EnterExamItem:
                    //进入项目 同时抓怕图片
                    Capture(message);
                    EnterExam(message);
                    break;

                case CmdTypeEnum.LeaveExamItem:
                    LeaveExam(message);
                    break;

                case CmdTypeEnum.SendExamStudentInfo:
                    break;

                case CmdTypeEnum.SendCarSensor:
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                Logger.Error("ErrorMessage" + JsonConvert.SerializeObject(message));
            }



            //Thread.Sleep(1000);
        }
Пример #6
0
        public void LeaveExam(ExamMessage message)
        {
            ProjectThrough entity = new ProjectThrough();

            entity.ExamRecordId     = GetExamRecord(message.GUID).Id;
            entity.ExamItemItemCode = GetExamItem(message.ExamItem).ItemCode;
            entity.LeaveTime        = message.SendTime;
            entity.CreateTime       = DateTime.Now;
            projectThroughRepository.AddEntity(entity);
        }
Пример #7
0
        /// <summary>
        /// 更新信号状态
        /// </summary>
        /// <param name="message"></param>
        public void SendCarSensor(ExamMessage message)
        {
            var sensor = message.CarSignalInfo;

            if (sensor == null || message.CarSignalInfo.Sensor == null)
            {
                return;
            }
            lblSensor.Text = GetCarSensorStr(message.CarSignalInfo);
            lblLicensePlateUseTime.Text = GetLicensePlateUseTime(message.CarSignalInfo);
        }
Пример #8
0
        //不需要这么麻烦 加一个判断初始化就行了!
        //如果数据库里面有这个数据库
        //
        private void FormLogin_Load(object sender, EventArgs e)
        {
            Logger = LogManager.GetLogger(GetType());

            LoginService = ServiceLocator.Current.GetInstance <LoginService>();

            var msg    = new ExamMessage();
            var result = JsonConvert.SerializeObject(msg);

            new UdpServer().Send(result, "192.168.1.6", 60000);
        }
Пример #9
0
        public void EnterExamItem(ExamMessage message)
        {
            switch (message.ExamItem)
            {
            case ExamItemEnum.CommonExamItem:
                break;

            case ExamItemEnum.ReverseParking:
                btnReverseParking.Appearance.BackColor = EnterExamColor;
                break;

            case ExamItemEnum.ReverseParkingEnd:
                btnReverseParking.Appearance.BackColor = LeaveExamColor;
                break;

            case ExamItemEnum.ParallelParking:
                btnParallelParking.Appearance.BackColor = EnterExamColor;
                break;

            case ExamItemEnum.ParallelParkingEnd:
                btnParallelParking.Appearance.BackColor = LeaveExamColor;
                break;

            case ExamItemEnum.SlopeWayParkingAndStarting:
                btnSlopeWayParkingAndStarting.Appearance.BackColor = EnterExamColor;
                break;

            case ExamItemEnum.SlopeWayParkingAndStartingEnd:
                btnSlopeWayParkingAndStarting.Appearance.BackColor = LeaveExamColor;
                break;

            case ExamItemEnum.QuarterTurning:
                btnQuarterTurning.Appearance.BackColor = EnterExamColor;
                break;

            case ExamItemEnum.QuarterTurningEnd:
                btnQuarterTurning.Appearance.BackColor = LeaveExamColor;
                break;

            case ExamItemEnum.CurveDriving:
                //如果这个方案不行那就只有用WebApi上传照片了
                btnCurveDriving.Appearance.BackColor = EnterExamColor;
                break;

            case ExamItemEnum.CurveDrivingEnd:
                btnCurveDriving.Appearance.BackColor = LeaveExamColor;
                break;

            default:
                break;
            }
        }
Пример #10
0
        public void updateExamMessage(ExamMessage message)
        {
            this.InvokeAsync(() =>
            {
                switch (message.CmdType)
                {
                case CmdTypeEnum.StartExam:
                    BtnClickAfter(btnStartExam);
                    StartExam(message);
                    break;

                case CmdTypeEnum.EndExam:
                    BtnClickAfter(btnEndExam);
                    EndExam(message);
                    break;

                case CmdTypeEnum.BreakeRule:
                    BreakeRule(message);
                    break;

                case CmdTypeEnum.Capture:
                    break;

                case CmdTypeEnum.EnterExamItem:
                    EnterExamItem(message);
                    break;

                case CmdTypeEnum.LeaveExamItem:
                    LeaveExamItem(message);
                    break;

                case CmdTypeEnum.SendExamStudentInfo:
                    BtnClickAfter(btnSendExam);
                    SendExamStudentInfo(message);
                    break;

                case CmdTypeEnum.SendCarSensor:
                    SendCarSensor(message);
                    break;

                default:
                    break;
                }
            });
            Task.Run(() => {
                examService.AddExamInfo(message);
            });



            //表明是当前考生
        }
Пример #11
0
        /// <summary>
        /// 如果是通过项目
        /// </summary>
        /// <param name="cmdType"></param>
        public void SendMessage(CmdTypeEnum cmdType, ExamItemEnum ExamItem = ExamItemEnum.CommonExamItem, DeductionRule rule = null)
        {
            if (CurrentExamCar == null)
            {
                MessageBox.Show("请分配考生", "监考大厅");
                return;
            }
            ExamMessage message = new ExamMessage();

            //我其实是依赖与这个给考生赋值
            message.ExamStudent = CurrentExamCar.ExamStudent;
            if (cmdType != CmdTypeEnum.SendExamStudentInfo)
            {
                message.ExamStudent.IDCardImage = null;
            }
            if (cmdType == CmdTypeEnum.SendExamStudentInfo)
            {
                //如果照片被清空 直接取指定路径读取照片
                if (message.ExamStudent.IDCardImage == null)
                {
                    //直接还思路
                    message.ExamStudent.IDCardImage = GetIDCardByte();
                }
            }
            //直接再界面取怎么样?
            message.SendTime = DateTime.Now;
            message.CmdType  = cmdType;
            message.ExamItem = ExamItem;

            if (cmdType == CmdTypeEnum.BreakeRule)
            {
                //发送扣分
                message.DeductionRule                = new ExamMessageDeductionRule();
                message.DeductionRule.ExamItemId     = rule.ExamItemId;
                message.DeductionRule.RuleCode       = rule.RuleCode;
                message.DeductionRule.RuleName       = rule.RuleName;
                message.DeductionRule.ExamItemName   = rule.ExamItemName;
                message.DeductionRule.SubRuleCode    = rule.SubRuleCode;
                message.DeductionRule.DeductedScores = rule.DeductedScores;
            }
            // message.DeductionRule = rule;

            var msg = JsonConvert.SerializeObject(message);

            //消息以Upd的行驶发出去
            //
            //todo:我终于也用上了GitHub了
            //todo:这个还是需要考虑进行优化的
            //todo:可以考虑是用框架 看看性能各方面如何
            this.udpCarSignalSeedV4.SocketSend(msg, Position);
            //  udpServer.Send(msg, CurrentExamCar.Ip, CurrentExamCar.Port);
        }
Пример #12
0
        /// <summary>
        /// 抓拍
        /// </summary>
        /// <param name="message"></param>
        public void Capture(ExamMessage message)
        {
            //如果抓怕的图片不为空
            if (message.CapturImage != null)
            {
                ExamCapture entity = new ExamCapture();
                entity.ExamRecordId     = GetExamRecord(message.GUID).Id;
                entity.ExamItemItemCode = GetExamItem(message.ExamItem).ItemCode;

                entity.Image      = message.CapturImage;
                entity.CreateTime = DateTime.Now;
                examCaptureRepository.AddEntity(entity);
            }
        }
Пример #13
0
 /// <summary>
 /// 验证消息是否合法
 /// </summary>
 /// <param name="message"></param>
 public bool VaildMessage(ExamMessage message)
 {
     if (message.CmdType != CmdTypeEnum.StartExam)
     {
         //去数据库中查询是否有该记录
         var entity = examRecordRepository.LoadEntitiy(s => s.GUID == message.GUID);
         if (entity == null)
         {
             var msg = JsonConvert.SerializeObject(message);
             Logger.Error("验证消息不合法:" + msg);
             return(false);
         }
         return(true);
     }
     return(true);
 }
Пример #14
0
        public void StartExam(ExamMessage message)
        {
            var startExamTime = message.SendTime;

            lblStartTime.Text = string.Format("开始考试:{0:00}:{1:00}:{2:00}", startExamTime.Hour, startExamTime.Minute, startExamTime.Second);
            var status = message.IsPreliminaryExam ? "初考" : "补考";

            lblNameStatusScore.Text = string.Format("姓名:{0}   状态:{1}   成绩:{2}分", message.ExamStudent.Name, status, message.Score);
            Init();

            BtnDisable(btnStartExam);
            BtnDisable(btnPrint);
            BtnEnable(btnArtificialEvaluation);
            BtnDisable(btnSendExam);
            BtnEnable(btnEndExam);
        }
Пример #15
0
        public void TestVaildMessage()
        {
            ExamMessage msg = new ExamMessage();

            msg.GUID = "dsds";
            var car         = new EFRepositoryBase <ExamCar>();
            var examRecord  = new EFRepositoryBase <ExamRecord>();
            var examCapture = new EFRepositoryBase <ExamCapture>();
            var breakeRule  = new EFRepositoryBase <ExamBreakeRuleRecord>();
            var examItem    = new EFRepositoryBase <ExamItem>();
            var project     = new EFRepositoryBase <ProjectThrough>();
            var examStudent = new EFRepositoryBase <ExamStudent>();

            var examService = new ExamService(car, examRecord, examCapture, breakeRule, examItem, project, examStudent);

            examService.AddExamInfo(msg);
        }
Пример #16
0
 protected virtual void StartCore()
 {
     try
     {
         Data = ReadCommands();
         if (string.IsNullOrEmpty(Data))
         {
             return;
         }
         ExamMessage examMessage = JsonConvert.DeserializeObject <ExamMessage>(Data);
         //收到的消息再通过消息模式转发出来
         Messenger.Send <ExamMessage>(examMessage);
     }
     catch (Exception ex)
     {
         Logger.Error("解析信号错误:" + ex.Message + "信号:" + Data);
     }
 }
Пример #17
0
        /// <summary>
        /// 开始考试
        /// </summary>
        /// <param name="message"></param>
        public void StartExam(ExamMessage message)
        {
            //创建考试记录 写入开始时间
            //TODO:GUID
            //怎样获取当天
            ExamRecord record = new ExamRecord();

            record.BeginTime         = message.SendTime;
            record.IsPreliminaryExam = message.IsPreliminaryExam;
            //这个去获取
            record.LicensePlate  = GetLicensePlateByIdCard(message.ExamStudent.IdCard);
            record.ExamLine      = message.ExamLine;
            record.ExamStudentId = GetExamStudent(message.ExamStudent.IdCard).Id;
            record.Score         = message.Score;
            record.GUID          = message.GUID;
            record.CreateTime    = DateTime.Now;
            examRecordRepository.AddEntity(record);
        }
Пример #18
0
        public void EndExam(ExamMessage message)
        {
            var endExamTime = message.SendTime;

            lblEndTime.Text = string.Format("考试结束:{0:00}:{1:00}:{2:00}", endExamTime.Hour, endExamTime.Minute, endExamTime.Second);

            BtnEnable(btnStartExam);
            BtnEnable(btnPrint);
            BtnDisable(btnArtificialEvaluation);
            BtnEnable(btnSendExam);
            BtnDisable(btnEndExam);

            btnEndExam.Enabled              = false;
            btnSendExam.Enabled             = true;
            btnPrint.Enabled                = true;
            btnArtificialEvaluation.Enabled = false;
            btnSendExam.Enabled             = true;
        }
Пример #19
0
        private void ReceiveMessage(object a)
        {
            IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);

            try
            {
                byte[] bytRecv = udpcRecv.Receive(ref remoteIpep);
                string message = Encoding.Default.GetString(bytRecv, 0, bytRecv.Length);

                ExamMessage examMessage = JsonConvert.DeserializeObject <ExamMessage>(message);
                //收到的消息再通过消息模式转发出来
                Messenger.Send <ExamMessage>(examMessage);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Пример #20
0
        public void BreakeRule(ExamMessage message)
        {
            var _deductionRule = new DeductionRule();

            _deductionRule.ExamItemName   = message.DeductionRule.ExamItemName;
            _deductionRule.RuleName       = message.DeductionRule.DeductedReason;
            _deductionRule.DeductedScores = message.DeductionRule.DeductedScores;

            //扣分还要更新分数
            _deductionRules.Insert(0, _deductionRule);
            ruleBindingSource         = new BindingSource(_deductionRules, "");
            dgvDeductRules.DataSource = ruleBindingSource;
            dgvDeductRules.Refresh();

            //收到扣分就需要更新分数
            var status = message.IsPreliminaryExam ? "初考" : "补考";

            lblNameStatusScore.Text = string.Format("姓名:{0}   状态:{1}   成绩:{2}分", message.ExamStudent.Name, status, message.Score);
        }
Пример #21
0
        //不需要这么麻烦 加一个判断初始化就行了!
        //如果数据库里面有这个数据库
        //
        private void FormLogin_Load(object sender, EventArgs e)
        {
            Logger = LogManager.GetLogger(GetType());

            LoginService = ServiceLocator.Current.GetInstance <LoginService>();

            var msg    = new ExamMessage();
            var result = JsonConvert.SerializeObject(msg);


            //  carSignal.CreateSendSocket("192.168.1.6",30000,0);
            //while (true)
            //{
            //    carSignal.SocketSend("234", 0);
            //}
            // new UdpServer().StartReceiveMsg();
            //开始接收信息

            // new UdpServer().Send(result, "192.168.1.6", 60000);
        }
Пример #22
0
        /// <summary>
        /// 扣分
        /// </summary>
        /// <param name="message"></param>
        public void BreakeRule(ExamMessage message)
        {
            ExamBreakeRuleRecord entity = new ExamBreakeRuleRecord();

            entity.ExamRecordId     = GetExamRecord(message.GUID).Id;
            entity.ExamItemItemCode = GetExamItem(message.ExamItem).ItemCode;
            entity.IsDelete         = false;
            entity.RuleCode         = message.DeductionRule.RuleCode;
            entity.SubRuleCode      = message.DeductionRule.SubRuleCode;
            entity.Score            = message.DeductionRule.DeductedScores;
            entity.DeductedReason   = message.DeductionRule.DeductedReason;
            entity.CreateTime       = DateTime.Now;
            examBreakeRuleRecordRepository.AddEntity(entity);

            //扣分了 就应该更新扣分分数
            var examRecordEntity = GetExamRecord(message.GUID);

            examRecordEntity.Score = message.Score;
            examRecordRepository.UpdateEntity(examRecordEntity);


            //扣分了就应该更新数据库显示的分数
            //
        }
Пример #23
0
        public void ExamRecordTest()
        {
            //首先开始考试
            ExamMessage msg = new ExamMessage();

            msg.GUID = "dsds";
            var car         = new EFRepositoryBase <ExamCar>();
            var examRecord  = new EFRepositoryBase <ExamRecord>();
            var examCapture = new EFRepositoryBase <ExamCapture>();
            var breakeRule  = new EFRepositoryBase <ExamBreakeRuleRecord>();
            var examItem    = new EFRepositoryBase <ExamItem>();
            var project     = new EFRepositoryBase <ProjectThrough>();
            var examStudent = new EFRepositoryBase <ExamStudent>();

            var service = new ExamService(car, examRecord, examCapture, breakeRule, examItem, project, examStudent);
            var message = new ExamMessage();

            message.CmdType            = CmdTypeEnum.StartExam;
            message.SendTime           = DateTime.Now;
            message.ExamStudent        = new ExamStudent();
            message.ExamStudent.IdCard = "500227199111222222";
            message.ExamStudent.Name   = "张三";
            message.IsPreliminaryExam  = true;
            message.ExamLine           = "测试一号线";
            message.GUID = System.Guid.NewGuid().ToString("N");
            // message.GUID = "70760794d8864c6d9d374fc6dca767dd";
            message.Score = 100;

            //开始考试
            service.AddExamInfo(message);


            //通过项目 侧方停车
            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.ParallelParking;
            message.SendTime = DateTime.Now;
            service.AddExamInfo(message);

            //抓拍
            message.CmdType     = CmdTypeEnum.Capture;
            message.ExamItem    = ExamItemEnum.ParallelParking;
            message.CapturImage = System.IO.File.ReadAllBytes("capture.jpg");
            message.SendTime    = DateTime.Now;
            service.AddExamInfo(message);


            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.ParallelParkingEnd;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType       = CmdTypeEnum.BreakeRule;
            message.SendTime      = DateTime.Now;
            message.Score         = 0;
            message.DeductionRule = new ExamMessageDeductionRule();
            message.DeductionRule.DeductedScores = 100;
            message.DeductionRule.DeductedReason = "不按考试路线行驶";
            message.DeductionRule.RuleCode       = "10101";
            message.DeductionRule.ExamItemId     = (int)ExamItemEnum.ParallelParking;
            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.CurveDriving;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.CurveDrivingEnd;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType     = CmdTypeEnum.Capture;
            message.ExamItem    = ExamItemEnum.CurveDrivingEnd;
            message.CapturImage = System.IO.File.ReadAllBytes("capture.jpg");
            service.AddExamInfo(message);


            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.QuarterTurning;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.QuarterTurningEnd;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.ReverseParking;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.ReverseParkingEnd;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.SlopeWayParkingAndStarting;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EnterExamItem;
            message.ExamItem = ExamItemEnum.SlopeWayParkingAndStartingEnd;
            message.SendTime = DateTime.Now;

            service.AddExamInfo(message);

            message.CmdType  = CmdTypeEnum.EndExam;
            message.SendTime = DateTime.Now;
            service.AddExamInfo(message);
        }
Пример #24
0
 public void LeaveExamItem(ExamMessage message)
 {
     EnterExamItem(message);
 }
Пример #25
0
        /// <summary>
        /// 收到客户端的消息请求更新考生姓名身份证头像
        /// </summary>
        /// <param name=""></param>
        public void SendExamStudentInfo(ExamMessage message)
        {
            var examCar = examService.GetExamCar(message.ExamStudent.IdCard);

            updateExamCarInfo(message.ExamStudent, examCar);
        }