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); } }
/// <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); }
/// <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); }
//初始化加载所有绑定车辆以前绑定的考试 public void OnExamMessage(ExamMessage message) { var control = GetCarExamControl(message.ExamStudent.IdCard); if (control != null) { control.updateExamMessage(message); } }
/// <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); }
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); }
/// <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); }
//不需要这么麻烦 加一个判断初始化就行了! //如果数据库里面有这个数据库 // 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); }
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; } }
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); }); //表明是当前考生 }
/// <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); }
/// <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); } }
/// <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); }
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); }
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); }
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); } }
/// <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); }
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; }
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); } }
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); }
//不需要这么麻烦 加一个判断初始化就行了! //如果数据库里面有这个数据库 // 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); }
/// <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); //扣分了就应该更新数据库显示的分数 // }
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); }
public void LeaveExamItem(ExamMessage message) { EnterExamItem(message); }
/// <summary> /// 收到客户端的消息请求更新考生姓名身份证头像 /// </summary> /// <param name=""></param> public void SendExamStudentInfo(ExamMessage message) { var examCar = examService.GetExamCar(message.ExamStudent.IdCard); updateExamCarInfo(message.ExamStudent, examCar); }