Exemple #1
0
        private void DealGpsDataProc(object obj)
        {
            try
            {
                Byte[] data = (Byte[])obj;

                //1-4字节为包类型,默认传的是1,这里没有用到
                int type = System.BitConverter.ToInt32(data.Skip(0).Take(4).ToArray(), 0);

                //5-8字节为考车号
                int kch = System.BitConverter.ToInt32(data.Skip(4).Take(4).ToArray(), 0);
                if (kch <= 0)
                {
                    Log.GetLogger().ErrorFormat("udp 数据解析得到的考车号为 {0}", kch);
                    return;
                }
                if (!m_dicCars.ContainsKey(kch) || !m_dicExamProcedures.ContainsKey(kch))
                {
                    Log.GetLogger().ErrorFormat("不存在考车 {0},请检查配置", kch);
                    return;
                }
                ExamProcedure examProcedure = m_dicExamProcedures[kch];

                Log.GetLogger().DebugFormat("考车 {0} 接收到 GPS 数据", kch);

                //接下来的数据结构可以参考 GPSData 类
                //8个字节存放double类型的经度
                //8个字节存放double类型的纬度
                //4个字节存放float类型的方向角
                //4个字节存放float类型的速度
                //4个字节存放float类型的里程
                double longitude      = System.BitConverter.ToDouble(data.Skip(8).Take(8).ToArray(), 0);
                double latitude       = System.BitConverter.ToDouble(data.Skip(16).Take(8).ToArray(), 0);
                float  directionAngle = System.BitConverter.ToSingle(data.Skip(24).Take(4).ToArray(), 0);
                float  speed          = System.BitConverter.ToSingle(data.Skip(28).Take(4).ToArray(), 0);
                float  mileage        = System.BitConverter.ToSingle(data.Skip(32).Take(4).ToArray(), 0);
                Log.GetLogger().DebugFormat("longitude={0}, latitude={1}, angle={2}, speed={3}, mileage={4}",
                                            longitude, latitude, directionAngle, speed, mileage);

                GPSData gpsData = new GPSData(longitude, latitude, directionAngle, speed, mileage);

                if (!examProcedure.HandleGPS(gpsData))
                {
                    Log.GetLogger().ErrorFormat("examProcedure.HandleGPS failed, kch={0}", kch);
                }
            }
            catch (Exception e)
            {
                Log.GetLogger().ErrorFormat("catch an error : {0}", e.Message);
            }

            Log.GetLogger().DebugFormat("DealGpsDataProc end");
        }
Exemple #2
0
        /// <summary>
        /// 项目扣分
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="xmbh">项目编号,包含项目编号和错误编号,用@分隔</param>
        /// <param name="time">时间</param>
        /// <returns></returns>
        private bool HandleM17C53(int kch, string xmbh, string time)
        {
            string errorMsg = string.Empty;

            string[] strArray = BaseMethod.SplitString(xmbh, BaseDefine.SPLIT_CHAR_AT, out errorMsg);
            if (!string.IsNullOrEmpty(errorMsg) || strArray.Length != 2)
            {
                Log.GetLogger().ErrorFormat("17C53 接口存在错误,{0}", errorMsg);
                return(false);
            }
            string strXmCode     = strArray[0];
            string strErrrorCode = strArray[1];
            int    xmCode        = string.IsNullOrEmpty(strXmCode) ? 0 : int.Parse(strXmCode);

            int kskm = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                 BaseDefine.CONFIG_KEY_KSKM, 0); //考试科目
            string xmName = string.Empty;                                        //项目名称

            if (BaseDefine.CONFIG_VALUE_KSKM_3 == kskm)                          //科目三
            {
                xmName = GetKM3Name(xmCode);
            }
            else  //科目二
            {
                xmName = GetKM2Name(xmCode);
            }

            //扣分类型、扣除分数
            if (!m_dicJudgeRules.ContainsKey(strErrrorCode))
            {
                Log.GetLogger().ErrorFormat("数据库扣分规则表中不存在错误编号为 {0} 的记录,请检查配置。", strErrrorCode);
                return(false);
            }
            string kflx = m_dicJudgeRules[strErrrorCode].JudgementType;
            int    kcfs = m_dicJudgeRules[strErrrorCode].Points;

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            if (!examProcedure.Handle17C53(xmName, kflx, kcfs))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C53 failed, kch={0}", kch);
                return(false);
            }

            Log.GetLogger().InfoFormat("HandleM17C53 end, kch={0}, xmName={1}, kflx={2}, kcfs={3}", kch, xmName, kflx, kcfs);
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// 考试开始
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="zkzmbh">准考证明编号</param>
        /// <returns></returns>
        private bool HandleM17C51(int kch, string zkzmbh)
        {
            int kscs = 0;   //考试次数
            int drcs = 0;   //当日次数

            //if (!GetExamCount(zkzmbh, ref kscs, ref drcs))
            //{
            //    return false;
            //}

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            //获取考生信息
            StudentInfo studentInfo = new StudentInfo();

            if (!GetStudentInfo(zkzmbh, ref studentInfo))
            {
                return(false);
            }

            if (!examProcedure.Handle17C51(studentInfo))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C51 failed, kch={0}", kch);
                return(false);
            }

            //try
            //{
            //    BaseMethod.TF17C51(kch, zkzmbh, kscs, drcs);
            //}
            //catch (Exception e)
            //{
            //    Log.GetLogger().ErrorFormat("TF17C51 catch an error : {0}, kch = {1}, zkzmbh = {2}, kscs = {3}, drcs = {4}",
            //        e.Message, kch, zkzmbh, kscs, drcs);
            //    return false;
            //}

            Log.GetLogger().InfoFormat("HandleM17C51 end, kch={0}, zkzmbh={1}, kscs={2}, drcs={3}", kch, zkzmbh, kscs, drcs);
            return(true);
        }
Exemple #4
0
        /// <summary>
        /// 考试完成
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="kscj">考试成绩</param>
        /// <returns></returns>
        private bool HandleM17C56(int kch, int kscj)
        {
            int kshgfs = 0; //考试合格分数

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("HandleM17C56错误,找不到考车 {0}", kch);
                return(false);
            }
            ExamProcedure examPorcedure = m_dicExamProcedures[kch];

            int kskm = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                 BaseDefine.CONFIG_KEY_KSKM, 0); //考试科目

            if (BaseDefine.CONFIG_VALUE_KSKM_3 == kskm)                          //科目三
            {
                kshgfs = BaseDefine.CONFIG_VALUE_KSHGFS_3;
            }
            else  //科目二
            {
                kshgfs = BaseDefine.CONFIG_VALUE_KSHGFS_2;
            }

            bool bPass = (kscj >= kshgfs) ? true : false;

            examPorcedure.Handle17C56(bPass);

            //try
            //{
            //    if (kscj >= kshgfs) //考试合格
            //    {
            //        BaseMethod.TF17C56(kch, 1, kscj);
            //    }
            //}
            //catch (Exception e)
            //{
            //    Log.GetLogger().ErrorFormat("TF17C56 catch an error : {0}, 考车号={1}, 科目{2}, 考试成绩={3}", e.Message,
            //        kch, kskm, kscj);
            //    return false;
            //}

            Log.GetLogger().InfoFormat("TF17C56 end, 考车号={0}, 科目{1}, 考试成绩={2}", kch, kskm, kscj);
            return(true);
        }
Exemple #5
0
        /// <summary>
        /// 项目完成
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="strZkzmbh">准考证明</param>
        /// <param name="strXmbh">项目编号</param>
        /// <returns></returns>
        private bool HandleM17C55(int kch, string strZkzmbh, string strXmbh)
        {
            //项目开始编号与项目完成编号不一样,车载没有把完成编号传过来,这里需要根据开始编号进行转换
            int xmBeginCode = string.IsNullOrEmpty(strXmbh) ? 0 : int.Parse(strXmbh);
            int xmEndCode   = 0;

            int kskm = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                 BaseDefine.CONFIG_KEY_KSKM, 0); //考试科目

            if (BaseDefine.CONFIG_VALUE_KSKM_3 == kskm)                          //科目三
            {
                string key = string.Format("考车{0}_2", kch);
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("找不到 {0} 摄像头配置,请检查配置", key);
                    //return false;
                }
                else
                {
                    CameraConf camera = m_dicCameras[key];
                    m_dicCars[kch].StartDynamicDecode(camera, 1);   //车载视频动态,第二画面车外
                }

                //科目三的项目完成编号为,开始编号+700
                //218 --> 918
                if (xmBeginCode < BaseDefine.XMBH_700)
                {
                    xmEndCode = xmBeginCode + BaseDefine.XMBH_700;
                }
                else
                {
                    xmEndCode = xmBeginCode;
                }
            }
            else  //科目二
            {
                //项目编号转换,科目二专用,数据库升级后可以不需要这段代码
                xmBeginCode = GetKM2NewXmBh(xmBeginCode);

                //e.g. 201500 --> 201990
                // 201500 先除以 1000,得到 201。再乘以 1000,得到 201000。再加上 990,得到 201990。
                xmEndCode = (xmBeginCode / 1000) * 1000 + 990;

                //科目二切换到场地远景视频
                string key = BaseDefine.STRING_KM2_PUBLIC_VIDEO;
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("找不到 {0} 摄像头配置,请检查配置", key);
                    //return false;
                }
                else
                {
                    CameraConf camera = m_dicCameras[key];
                    m_dicCars[kch].StartDynamicDecode(camera, 1);
                }
            }

            //获取项目类型
            if (!m_dicJudgeRules.ContainsKey(xmEndCode.ToString()))
            {
                Log.GetLogger().ErrorFormat("ErrorData 表不存在 {0} 记录,请检查配置", xmEndCode);
                return(false);
            }
            string xmlx = m_dicJudgeRules[xmEndCode.ToString()].JudgementType;

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            if (!examProcedure.Handle17C55(xmBeginCode, xmlx))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C55 failed, kch={0}", kch);
                return(false);
            }

            return(true);
        }
Exemple #6
0
        /// <summary>
        /// 项目开始
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="zkzmbh">准考证明编号</param>
        /// <param name="xmbh">项目编号</param>
        /// <returns></returns>
        private bool HandleM17C52(int kch, string zkzmbh, string xmbh)
        {
            int xmCode = string.IsNullOrEmpty(xmbh) ? 0 : int.Parse(xmbh);
            int nWnd2  = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_DISPLAY, BaseDefine.CONFIG_SECTION_CONFIG,
                                                   BaseDefine.CONFIG_KEY_WND2, 1); //画面二状态

            Log.GetLogger().DebugFormat("nWnd2 = {0}", nWnd2);

            if (1 == nWnd2)     //值为1时进行项目动态切换
            {
                string key = string.Format("{0}_1", xmbh);
                Log.GetLogger().DebugFormat("camera key = {0}", key);
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("摄像头 {0} 未配置,请检查配置文件。", key);
                    return(false);
                }

                CameraConf camera = m_dicCameras[key];
                m_dicCars[kch].StartDynamicDecode(camera, 1);   //第二画面进项目

                ////处理定点
                ////半坡停车时,车载会发 15010 摄像头编号过来,切换摄像头后,另外开一个线程,休眠几秒时间后,切换为原来的摄像头
                //if ((BaseDefine.XMBH_15010 == xmCode) || (BaseDefine.XMBH_15020 == xmCode) || (BaseDefine.XMBH_15030 == xmCode))
                //{
                //    Log.GetLogger().InfoFormat("定点:{0}", xmCode);

                //    if (BaseMethod.IsExistFile(BaseDefine.CONFIG_FILE_PATH_ZZIPChannel))
                //    {
                //        XmInfo xmInfo = new XmInfo(kch, xmCode);

                //        Thread QHThread = new Thread(new ParameterizedThreadStart(QHThreadProc));
                //        QHThread.Start(xmInfo);
                //    }

                //    return true;
                //}
            }

            //项目编号转换,科目二专用,数据库升级后可以不需要这段代码
            int xmCodeNew = GetKM2NewXmBh(xmCode);

            Log.GetLogger().DebugFormat("xmCodeNew = {0}", xmCodeNew);

            //获取项目类型(因为数据库里扣分类型和项目类型存在同一张表,所以这里参考C++代码,全部存在同一张字典里)
            if (!m_dicJudgeRules.ContainsKey(xmbh))
            {
                Log.GetLogger().ErrorFormat("扣分类型 {0} 未配置,请检查配置", xmbh);
                return(false);
            }
            string xmlx = m_dicJudgeRules[xmbh].JudgementType;  //项目类型

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            if (!examProcedure.Handle17C52(xmCodeNew, xmlx))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C52 failed, kch={0}", kch);
                return(false);
            }

            //try
            //{
            //    //使用 C++ dll 进行绘制
            //    Log.GetLogger().DebugFormat("kch={0}, zkzmbh={1}, xmCode={2}, kflx={3}", kch, zkzmbh, xmCodeNew, kflx);
            //    BaseMethod.TF17C52(kch, zkzmbh, xmCodeNew, kflx);
            //}
            //catch (Exception e)
            //{
            //    Log.GetLogger().ErrorFormat("TF17C52 catch an error : {0}, kch = {1}, zkzmbh = {2}, xmCodeNew = {3}, kflx = {4}",
            //        e.Message, kch, zkzmbh, xmCodeNew, kflx);
            //    return false;
            //}

            Log.GetLogger().InfoFormat("HandleM17C52 end, kch={0}, zkzmbh={1}", kch, zkzmbh);
            return(true);
        }
Exemple #7
0
        //开始运行
        private bool RunMap()
        {
            string     key        = string.Empty;
            CameraConf cameraConf = new CameraConf();

            //地图
            Image imgMap   = null;
            int   nLoadMap = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                       BaseDefine.CONFIG_KEY_LOADMAP, 0);

            if (1 == nLoadMap)
            {
                try
                {
                    imgMap = Image.FromFile(BaseDefine.IMG_PATH_MAPN);
                }
                catch (Exception e)
                {
                    Log.GetLogger().ErrorFormat("Image.FromFile catch an error : {0}", e.Message);
                }
            }

            foreach (int iKch in dicCars.Keys)
            {
                Thread.Sleep(10);

                CarManager carManager = dicCars[iKch];

                //动态解码
                key = string.Format("考车{0}_1", iKch);
                if (!dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("{0} 摄像头未配置,请检查", key);
                }
                else
                {
                    cameraConf = dicCameras[key];
                    carManager.StartDynamicDecode(cameraConf, 0);
                }

                key = string.Format("考车{0}_2", iKch);
                if (!dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("{0} 摄像头未配置,请检查", key);
                }
                else
                {
                    cameraConf = dicCameras[key];
                    carManager.StartDynamicDecode(cameraConf, 1);
                }

                try
                {
                    //被动解码
                    int thirdPH  = -1;
                    int fourthPH = -1;
                    if (carManager.StartPassiveDecode(2, ref thirdPH) && carManager.StartPassiveDecode(3, ref fourthPH))
                    {
                        ExamProcedure examProcedure = new ExamProcedure();
                        if (examProcedure.Init(m_userId, iKch, thirdPH, fourthPH, imgMap))
                        {
                            dicExamProcedures.Add(iKch, examProcedure);
                        }
                    }
                    else
                    {
                        Log.GetLogger().ErrorFormat("被动解码失败,kch={0}", iKch);
                    }
                }
                catch (Exception e)
                {
                    Log.GetLogger().ErrorFormat("catch an error : {0}", e.Message);
                }
            }

            return(true);
        }