Ejemplo n.º 1
0
        void HandleSubmitpaper(Carapplyarr carinfo)
        {
            var enterBjStart = DateTime.Now.AddDays(1);

            LogWrapper.LogInfoFormat("正在申请进京证 进京日期 {0} 进京时间 {1} 天", enterBjStart.ToString("yyyy-MM-dd"), mConfig.InbjDuration);
            State = RunState.WaitingNet;
            JinJingZhengAPI.Submitpaper(mConfig.UserID, mConfig.InbjDuration, enterBjStart, carinfo.licenseno, carinfo.engineno, mConfig.CarTypeCode,
                                        mConfig.VehicleType, Image.FromFile(mConfig.DrivingPhoto),
                                        Image.FromFile(mConfig.CarPhoto),
                                        mConfig.DriverName,
                                        mConfig.DriverLicenseno,
                                        Image.FromFile(mConfig.DriverPhoto),
                                        Image.FromFile(mConfig.PersonPhoto),
                                        carinfo.carid,
                                        mConfig.CarModel,
                                        mConfig.CarRegTime,
                                        (result, ex) => {
                if (ex == null)
                {
                    string rescode = result["rescode"].ToString();
                    string resdes  = result["resdes"].ToString();
                    if (rescode == "200")
                    {
                        LogWrapper.LogInfo("进京证申请成功,正在审核中.");
                        if (SendMail("进京证申请成功,正在审核" + carinfo.licenseno, enterBjStart.ToString("yyyy-MM-dd") + " " + mConfig.InbjDuration + "天"))
                        {
                            LogWrapper.LogInfo("提醒邮件发送成功...");
                        }
                        else
                        {
                            LogWrapper.LogInfo("提醒邮件发送失败...");
                        }
                    }
                    else
                    {
                        LogWrapper.LogError(string.Format("申请进京证失败.错误码:{0} 错误信息:{1}", rescode, resdes));
                        SendMail("进京证申请失败:" + rescode, resdes);
                    }
                }
                else
                {
                    HandleError("申请进京证失败,网络异常", ex);
                }

                State = RunState.Waiting;
            });
        }
        /// <summary>
        /// 申请进京证
        /// </summary>
        /// <param name="carinfo">车辆信息</param>
        /// <param name="pic_str">验证码文本</param>
        /// <param name="pic_id">验证码图片ID</param>
        void HandleSubmitpaper(Carapplyarr carinfo, string pic_str, string pic_id)
        {
            var enterBjStart = DateTime.Now.AddDays(1);

            LogWrapper.LogInfoFormat("正在申请进京证 进京日期 {0} 进京时间 {1} 天", enterBjStart.ToString("yyyy-MM-dd"), mConfig.InbjDuration);
            State = RunState.WaitingNet;
            api.Submitpaper(mConfig.UserID, mConfig.InbjDuration, enterBjStart, carinfo.licenseno, carinfo.engineno, mConfig.CarTypeCode,
                            mConfig.VehicleType, Image.FromFile(mConfig.DrivingPhoto),
                            Image.FromFile(mConfig.CarPhoto),
                            mConfig.DriverName,
                            mConfig.DriverLicenseno,
                            Image.FromFile(mConfig.DriverPhoto),
                            Image.FromFile(mConfig.PersonPhoto),
                            carinfo.carid,
                            mConfig.CarModel,
                            mConfig.CarRegTime,
                            pic_str,
                            (result, ex) => {
                var ret = result as JObject;
                if (ex == null)
                {
                    string rescode = ret["rescode"].ToString();
                    string resdes  = ret["resdes"].ToString();
                    if (rescode == "200")
                    {
                        LogWrapper.LogInfo("进京证申请成功,正在审核中.");
                        if (SendMail("进京证申请成功,正在审核" + carinfo.licenseno, enterBjStart.ToString("yyyy-MM-dd") + " " + mConfig.InbjDuration + "天"))
                        {
                            LogWrapper.LogInfo("提醒邮件发送成功...");
                        }
                        else
                        {
                            LogWrapper.LogInfo("提醒邮件发送失败...");
                        }
                    }
                    else
                    {
                        LogWrapper.LogError(string.Format("申请进京证失败.错误码:{0} 错误信息:{1}", rescode, resdes));
                        SendMail("进京证申请失败:" + rescode, resdes);
                        if (resdes.Contains("验证码错误"))
                        {
                            // 验证码错误
                            LogWrapper.LogInfo("正在向超级鹰报告验证码错误信息...");
                            //try {
                            //    string str = NetRecognizePic.CJY_ReportError(mConfig.CJYUsername, Utils.MD5String(mConfig.CJYPassword), pic_id, "96001");
                            //    JObject reportError = JObject.Parse(str);
                            //    string err_no = reportError["err_no"].ToString();
                            //    string err_str = reportError["err_str"].ToString();
                            //    if (err_no == "0") {
                            //        LogWrapper.LogInfo("向超级鹰报告验证码错误信息成功!");
                            //    } else {
                            //        LogWrapper.LogInfo("向超级鹰报告验证码错误信息失败:" + err_str);
                            //    }
                            //} catch {
                            //    LogWrapper.LogInfo("向超级鹰报告验证码错误信息时,发生错误!");
                            //}

                            // 继续识别验证码
                            //HandleCaptcha(carinfo);
                        }
                    }
                }
                else
                {
                    HandleError("申请进京证失败,网络异常", ex);
                }

                State = RunState.Waiting;
            });
        }
        /// <summary>
        /// 申请进京证
        /// </summary>
        /// <param name="result"></param>
        void HandleCheckEnterCar(JObject result)
        {
            try
            {
                EnterCartListResponse rep = JsonConvert.DeserializeObject <EnterCartListResponse>(result.ToString());
                if (rep.rescode == "200")
                {
                    // 1.获取当前所有进京证信息
                    List <Carapplyarr> enterCarInfolist = new List <Carapplyarr>();
                    if (rep.datalist != null)
                    {
                        foreach (var carInfo in rep.datalist)
                        {
                            if (carInfo.carapplyarr != null)
                            {
                                foreach (var entercar in carInfo.carapplyarr)
                                {
                                    enterCarInfolist.Add(entercar);
                                }
                            }
                        }
                    }

                    if (enterCarInfolist.Count <= 0)
                    {
                        LogWrapper.LogInfo("当前没有进京证信息,无法为您申请新的进京证!");
                        State = RunState.Waiting;
                        return;
                    }

                    // 2.检查是否需要申请新的进京证


                    // 计算当前进京证有效期
                    DateTime carStartTime    = DateTime.MaxValue;
                    DateTime carEndTime      = DateTime.MinValue;
                    DateTime carReadlEndTime = DateTime.MinValue;//进京证实际到期时间,不包过审核中的进京证
                    LogWrapper.LogInfoFormat("您现在共有 {0} 个进京证", enterCarInfolist.Count);
                    foreach (var entercar in enterCarInfolist)
                    {
                        var enterbjstart = DateTime.Parse(entercar.enterbjstart);
                        var enterbjend   = DateTime.Parse(entercar.enterbjend);
                        if (enterbjstart < carStartTime)
                        {
                            carStartTime = enterbjstart;
                        }
                        if (entercar.status == "1" || entercar.status == "2")
                        {
                            if (enterbjend > carEndTime)
                            {
                                carEndTime = enterbjend;
                            }
                        }

                        string statusStr = "状态:未知";
                        if (entercar.status == "0")
                        {
                            statusStr = " 状态:审核失败";
                        }
                        else if (entercar.status == "1")
                        {
                            statusStr = "状态:审核成功";
                            if (enterbjend > carReadlEndTime)
                            {
                                carReadlEndTime = enterbjend;
                            }
                        }
                        else if (entercar.status == "2")
                        {
                            statusStr = "状态:审核中";
                        }

                        LogWrapper.LogInfoFormat("进京证 {0} {1} 至 {2} {3}", entercar.licenseno, enterbjstart.ToString("yyyy-MM-dd"),
                                                 enterbjend.ToString("yyyy-MM-dd"), statusStr);
                    }



                    LogWrapper.LogInfoFormat("您当前进京证的有效期是 {0} 至 {1}", carStartTime.ToString("yyyy-MM-dd"),
                                             carEndTime.ToString("yyyy-MM-dd"));


                    //如果进京证有效期的截止时间是今天,则申请新的进京证
                    var now = DateTime.Now;
                    if (carEndTime.Year == now.Year && carEndTime.Month == now.Month && carEndTime.Day == now.Day)
                    {
                        // 申请新进京证
                        LogWrapper.LogInfo("您的进京证即将到期,正在为您申请新的进京证");

                        HandleCaptcha(enterCarInfolist[0]);

                        //State = RunState.Waiting;
                        return;
                    }

                    // 3.检查是否有新进京证申请成功
                    if (carReadlEndTime > lastCarEndTime)
                    {
                        string str = string.Format("进京证审核成功 {0} {1} 至 {2}", enterCarInfolist[0].licenseno, carStartTime.ToString("yyyy-MM-dd"),
                                                   carReadlEndTime.ToString("yyyy-MM-dd"));
                        LogWrapper.LogInfo(str);
                        if (mConfig.EnableMail)
                        {
                            string time = carStartTime.ToString("yyyy-MM-dd") + "-" + carReadlEndTime.ToString("yyyy-MM-dd");
                            if (SendMail("进京证审核成功:" + enterCarInfolist[0].licenseno, time))
                            {
                                LogWrapper.LogInfo("提醒邮件发送成功...");
                            }
                            else
                            {
                                LogWrapper.LogInfo("提醒邮件发送失败...");
                            }
                        }
                    }
                    lastCarEndTime = carReadlEndTime;


                    State = RunState.Waiting;
                }
                else
                {
                    LogWrapper.LogErrorFormat("获取进京证列表失败 {0}:{1}", rep.rescode, rep.resdes);
                }
                State = RunState.Waiting;
            } catch (Exception e)
            {
                LogWrapper.LogErrorFormat("获取进京证列表失败 {0}", e.Message);
            }
        }