Esempio n. 1
0
        public JsonResult DownloadQRCode(string gateId, int size)
        {
            try
            {
                List <int> dics = new List <int>();
                dics.Add(258);
                dics.Add(344);
                dics.Add(430);
                dics.Add(860);
                dics.Add(1280);

                List <string> imgs = new List <string>();
                ParkGate      gate = ParkGateServices.QueryByRecordId(gateId);
                if (gate == null)
                {
                    throw new MyException("获取通道信息失败");
                }
                BaseCompany company = CompanyServices.QueryByBoxID(gate.BoxID);
                if (company == null)
                {
                    throw new MyException("获取单位信息失败");
                }

                ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID);
                if (box == null)
                {
                    throw new MyException("获取岗亭信息失败");
                }

                ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID);
                if (area == null)
                {
                    throw new MyException("获取区域信息失败");
                }

                BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(area.PKID);
                if (parking == null)
                {
                    throw new MyException("获取车场信息失败");
                }
                string content = string.Format("{0}/qrl/scio_ix_pid={1}^io={2}", SystemDefaultConfig.SystemDomain, parking.PKID, gate.GateID);
                foreach (var item in dics)
                {
                    string parkingName = string.Format("{0}_{1}_{2}_{3}_{4}", parking.PKName, area.AreaName, box.BoxName, gate.GateName, item);
                    string result      = QRCodeServices.GenerateQRCode(company.CPID, content, item, parkingName);
                    imgs.Add(item.ToString() + "|" + result);
                }

                return(Json(MyResult.Success("", imgs)));
            }
            catch (MyException ex)
            {
                return(Json(MyResult.Error(ex.Message)));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "下载二维码失败");
                return(Json(MyResult.Error("下载二维码失败")));
            }
        }
Esempio n. 2
0
        //根据人员和车场信息 下载二维码
        public JsonResult DownloadQRCode(string parkingId, string personId, int size)
        {
            try
            {
                List <int> dics = new List <int>();
                dics.Add(258);
                dics.Add(344);
                dics.Add(430);
                dics.Add(860);
                dics.Add(1280);

                List <string> imgs = new List <string>();
                //if (string.IsNullOrWhiteSpace(SystemDefaultConfig.SystemDomain))
                //{
                //    throw new MyException("获取系统域名失败");
                //}
                BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(parkingId);
                if (parking == null)
                {
                    throw new MyException("获取车场信息失败");
                }

                BaseVillage village = VillageServices.QueryVillageByRecordId(parking.VID);
                if (village == null)
                {
                    throw new MyException("获取小区信息失败");
                }
                //string url = SystemDefaultConfig.SystemDomain;
                string url     = "http://spscs.spsing.cn";
                string content = string.Format("{0}/qrl/qrp_ix_pid={1}^personId={2}", url, parkingId.Trim(), personId);
                foreach (var item in dics)
                {
                    try
                    {
                        string parkingName = string.Format("{0}_{1}", parking.PKName, item);
                        string result      = QRCodeServices.GenerateQRCode(village.CPID, content, item, parkingName);
                        imgs.Add(item.ToString() + "|" + result);
                        TxtLogServices.WriteTxtLogEx("DownloadQRCode", item.ToString() + "|" + result);
                    }
                    catch (Exception ex)
                    {
                        ExceptionsServices.AddExceptions(ex, "生存车场二维码失败");
                        imgs.Add(item.ToString() + "|");
                    }
                }

                return(Json(MyResult.Success("", imgs)));
            }
            catch (MyException ex)
            {
                return(Json(MyResult.Error(ex.Message)));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "下载二维码失败");
                return(Json(MyResult.Error("下载二维码失败")));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 获得最小提现金额
        /// </summary>
        /// <returns></returns>
        public JsonResult GetMinAmount()
        {
            string     pkid = Request.Params["pkid"];
            JsonResult json = new JsonResult();

            try
            {
                json.Data = ParkingServices.QueryParkingByParkingID(pkid);
            }
            catch (Exception ex)
            { }
            return(json);
        }
Esempio n. 4
0
        /// <summary>
        /// 计算金额
        /// </summary>
        /// <param name="PKID">车场编号</param>
        /// <param name="StartTime">开始时间</param>
        /// <param name="EndTime">结束时间</param>
        /// <returns></returns>
        public static CalSettleAmountModel CalSettleAmount(string PKID, DateTime StartTime, DateTime EndTime)
        {
            CalSettleAmountModel settleamount = new CalSettleAmountModel();

            try
            {
                IParkSettlement factory = ParkSettlementFactory.GetFactory();
                //获取结算金额
                decimal totalamount       = 0;
                decimal handlingfeeamount = 0;
                decimal receivableamount  = 0;
                //List<ParkOrder> orderlist = factory.GetSettlementPayAmount(PKID, StartTime, EndTime);
                List <Statistics_Gather> orderlist = factory.GetSettlementPayAmount(PKID, StartTime, EndTime);
                if (orderlist != null && orderlist.Count > 0)
                {
                    var park = ParkingServices.QueryParkingByParkingID(PKID);
                    if (park == null || park.HandlingFee <= 0)
                    {
                        settleamount.Message   = "未配置车场结算费率 不能生成结算单";
                        settleamount.IsSuccess = false;
                        return(settleamount);
                    }
                    //费率在车场配置
                    decimal handlingfee = park.HandlingFee / 1000;
                    //foreach (var order in orderlist)
                    //{
                    //    //totalamount += order.PayAmount;
                    //    //handlingfeeamount += Math.Round(order.PayAmount * handlingfee, 2);
                    //
                    //}
                    //receivableamount = totalamount - handlingfeeamount;
                    foreach (var order in orderlist)
                    {
                        totalamount += order.OnLine_Amount;
                    }
                    handlingfeeamount = Math.Round(totalamount * handlingfee, 2);
                    receivableamount  = totalamount - handlingfeeamount;
                }

                settleamount.IsSuccess     = true;
                settleamount.RateFeeAmount = handlingfeeamount;
                settleamount.ReceiveAmount = receivableamount;
                settleamount.TotalAmount   = totalamount;
            }
            catch (Exception ex)
            {
                settleamount.IsSuccess = false;
                settleamount.Message   = "计算费用异常";
            }
            return(settleamount);
        }
Esempio n. 5
0
        public ActionResult SaveBooking(string plateNo, string parkingId, string areaId, DateTime startTime, DateTime endTime)
        {
            try
            {
                WXReserveBitResult result = PkBitBookingServices.WXReservePKBit(WeiXinUser.AccountID, string.Empty, parkingId, areaId, plateNo, startTime, endTime);
                if (result.code == 0)
                {
                    if (parkingId != result.Order.PKID)
                    {
                        throw new MyException("车场编号不一致");
                    }

                    BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(parkingId);
                    if (parking == null)
                    {
                        throw new MyException("获取车场信息失败");
                    }
                    ViewBag.ParkingName = parking.PKName;

                    ParkArea area = ParkAreaServices.QueryByRecordId(areaId);
                    if (area == null)
                    {
                        throw new MyException("获取区域信息失败");
                    }
                    ViewBag.AreaName  = area.AreaName;
                    ViewBag.PlateNo   = plateNo;
                    ViewBag.StartTime = startTime.ToString("yyyy-MM-dd HH:mm:ss");
                    ViewBag.EndTime   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
                    ViewBag.AreaId    = areaId;
                    return(View(result));
                }
                if (result.code == 1)
                {
                    throw new MyException("您已经预约过了,请勿重复预约");
                }
                throw new MyException("预约失败[" + result.message + "]");
            }
            catch (MyException ex) {
                return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = ex.Message }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("WeiXinWeb", "预约失败", ex, LogFrom.WeiXin);
                return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = "预约失败!" }));
            }
        }
Esempio n. 6
0
 private string GetParkingName(string parkingId)
 {
     try
     {
         BaseParkinfo model = ParkingServices.QueryParkingByParkingID(parkingId);
         if (model != null)
         {
             return(model.PKName);
         }
         return(string.Empty);
     }
     catch (Exception ex)
     {
         ExceptionsServices.AddExceptionToDbAndTxt("AliPay_Error", "获取车场名称失败", ex);
         return(string.Empty);
     }
 }
Esempio n. 7
0
        /// <summary>
        /// 获得临停缴费记录
        /// </summary>
        /// <param name="paras">输入参数</param>
        /// <returns></returns>
        public static List <Statistics_Gather> Search_MonthStatistics(InParams paras)
        {
            IStatistics factory = StatisticsFactory.GetFactory();
            List <Statistics_Gather> gatherlist = factory.Search_MonthStatistics(paras);

            if (!string.IsNullOrEmpty(paras.ParkingID) && gatherlist != null && gatherlist.Count > 0)
            {
                BaseParkinfo parkinfo = ParkingServices.QueryParkingByParkingID(paras.ParkingID);
                if (parkinfo != null)
                {
                    foreach (var v in gatherlist)
                    {
                        v.ParkingName = parkinfo.PKName;
                    }
                }
            }
            return(gatherlist);
        }
Esempio n. 8
0
        /// <summary>
        /// 获得临停缴费记录
        /// </summary>
        /// <param name="paras">输入参数</param>
        /// <param name="PageSize">每页显示数</param>
        /// <param name="PageIndex">当前页</param>
        /// <returns></returns>
        public static Pagination Search_MonthStatistics(InParams paras, int PageSize, int PageIndex)
        {
            Pagination  _pagination = new Pagination();
            IStatistics factory     = StatisticsFactory.GetFactory();

            _pagination.Total = factory.Search_MonthStatisticsCount(paras);
            _pagination.StatisticsGatherList = factory.Search_MonthStatistics(paras, PageSize, PageIndex);
            if (!string.IsNullOrEmpty(paras.ParkingID) && _pagination.StatisticsGatherList != null && _pagination.StatisticsGatherList.Count > 0)
            {
                BaseParkinfo parkinfo = ParkingServices.QueryParkingByParkingID(paras.ParkingID);
                if (parkinfo != null)
                {
                    foreach (var v in _pagination.StatisticsGatherList)
                    {
                        v.ParkingName = parkinfo.PKName;
                    }
                }
            }
            return(_pagination);
        }
Esempio n. 9
0
        public ActionResult DerateSuccess(string msg, string parkingId, string licensePlate)
        {
            try
            {
                TxtLogServices.WriteTxtLogEx("QRCodeDerate", string.Format("领取成功,parkingId:{0},licensePlate:{1}", parkingId, licensePlate));
                ViewBag.Msg = msg;
                string hrefUrl = string.Empty;

                BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(parkingId);
                if (parking == null)
                {
                    throw new MyException("获取车场信息失败");
                }

                if (parking.MobilePay == YesOrNo.Yes)
                {
                    string companyId = CompanyServices.GetCompanyId(parkingId, string.Empty);
                    if (string.IsNullOrWhiteSpace(companyId))
                    {
                        throw new MyException("获取单位编号失败");
                    }

                    WX_ApiConfig config = WXApiConfigServices.QueryWXApiConfig(companyId);
                    if (config == null)
                    {
                        throw new MyException("获取微信配置失败");
                    }

                    hrefUrl = string.Format("{0}/qrl/qrp_ix_pid={1}^pn={2}", SystemDefaultConfig.SystemDomain, parkingId, licensePlate);
                }
                ViewBag.HrefUrl      = hrefUrl;
                ViewBag.LicensePlate = licensePlate;
                ViewBag.DerateTime   = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                return(View());
            }
            catch (Exception ex)
            {
                TxtLogServices.WriteTxtLogEx("QRCodeDerate", "提示优免结果出错", ex);
                return(RedirectToAction("BrowseError", "QRCodeDerate", new { errorMsg = "领取优免券成功,但是处理其他业务异常了【不影响优免券的正常使用】" }));
            }
        }
Esempio n. 10
0
        public ActionResult Index(string plateNumber, string parkingId)
        {
            string plateCity = string.Empty;
            string plateArea = string.Empty;
            string number    = string.Empty;

            if (!string.IsNullOrWhiteSpace(plateNumber) && plateNumber.Length >= 5)
            {
                plateCity = plateNumber.Substring(0, 1);
                plateArea = plateNumber.Substring(1, 1);
                number    = plateNumber.Substring(2);
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(parkingId))
                {
                    BaseParkinfo park = ParkingServices.QueryParkingByParkingID(parkingId);
                    if (park != null && !string.IsNullOrWhiteSpace(park.DefaultPlate) && park.DefaultPlate.Length == 2)
                    {
                        plateCity = park.DefaultPlate.Substring(0, 1);
                        plateArea = park.DefaultPlate.Substring(1, 1);
                    }
                }
                if ((string.IsNullOrWhiteSpace(plateCity) || string.IsNullOrWhiteSpace(plateArea)) && !string.IsNullOrWhiteSpace(firstPlateNo) && firstPlateNo.Length == 2)
                {
                    TxtLogServices.WriteTxtLogEx("LicensePlate", "firstPlateNo:" + firstPlateNo);
                    plateCity = firstPlateNo.Substring(0, 1);
                    plateArea = firstPlateNo.Substring(1, 1);
                }
            }
            TxtLogServices.WriteTxtLogEx("LicensePlate", string.Format("plateCity:{0},plateArea:{1},number:{2}", plateCity, plateArea, number));
            ViewBag.city   = string.IsNullOrWhiteSpace(plateCity) ? "粤" : plateCity;
            ViewBag.area   = string.IsNullOrWhiteSpace(plateArea) ? "B" : plateArea;
            ViewBag.number = number.ToPlateNo();
            return(PartialView());
        }
Esempio n. 11
0
        /// <summary>
        /// 生成结算单
        /// </summary>
        /// <param name="PKID">车场编号</param>
        /// <param name="StartTime">开始时间</param>
        /// <param name="EndTime">结束时间</param>
        /// <param name="UserID">用户编号</param>
        /// <returns></returns>
        public static MyResult BuildSettlement(string PKID, DateTime StartTime, DateTime EndTime, string Remark, string UserID)
        {
            MyResult result = new MyResult();

            result.result = false;
            try
            {
                var companys = new Common.SqlRepository.CompanyDAL().QueryTopCompany();
                List <Entities.SysUser> users = new List <Entities.SysUser>();
                if (companys != null)
                {
                    users = new Common.SqlRepository.SysUserDAL().QuerySysUserByCompanys(companys.Select(u => u.CPID).ToList());
                }

                if (users != null && users.Count > 0)
                {
                    if (users.Find(u => u.RecordID == UserID) != null)
                    {
                        result.msg = "平台帐号不能申请结算单";
                        return(result);
                    }
                }

                string              priod      = "F00001";
                IParkSettlement     factory    = ParkSettlementFactory.GetFactory();
                ParkSettlementModel settlelist = factory.GetMaxPriodSettlement(PKID);
                if (settlelist != null)
                {
                    if (settlelist.SettleStatus != 2 && settlelist.SettleStatus != -1)
                    {
                        //结算单还在审批中 不能建立新的结算单
                        result.msg = "帐期:" + settlelist.Priod + " 的结算单正在审批中 不能创建新的结算单";
                        return(result);
                    }
                    else
                    {
                        string maxpriod = settlelist.Priod;
                        priod = maxpriod.Substring(0, 1) + (1 + int.Parse(maxpriod.Substring(1))).ToString().PadLeft(5, '0');
                    }

                    if (StartTime < settlelist.EndTime)
                    {
                        result.msg = "当前结算单的开始时间不能小于前一个结算单结算时间";
                        return(result);
                    }

                    if (settlelist.EndTime.AddSeconds(1) != StartTime)
                    {
                        result.msg = "提现需要日期连续";
                        return(result);
                    }
                }
                //获取结算金额
                decimal          totalamount       = 0;
                decimal          handlingfeeamount = 0;
                decimal          receivableamount  = 0;
                List <ParkOrder> orderlist         = factory.GetSettlementPayAmount(PKID, StartTime, EndTime);
                if (orderlist != null && orderlist.Count > 0)
                {
                    var park = ParkingServices.QueryParkingByParkingID(PKID);
                    if (park == null || park.HandlingFee <= 0)
                    {
                        result.msg = "未配置车场结算费率 不能生成结算单";
                        return(result);
                    }
                    //费率在车场配置
                    decimal handlingfee = park.HandlingFee / 1000;
                    foreach (var order in orderlist)
                    {
                        totalamount       += order.PayAmount;
                        handlingfeeamount += Math.Round(order.PayAmount * handlingfee, 2);
                    }
                    receivableamount = totalamount - handlingfeeamount;
                }
                ParkSettlementModel settlemodel = new ParkSettlementModel()
                {
                    PKID              = PKID,
                    TotalAmount       = totalamount,
                    ReceivableAmount  = receivableamount,
                    HandlingFeeAmount = handlingfeeamount,
                    EndTime           = EndTime,
                    StartTime         = StartTime,
                    Priod             = priod,
                    Remark            = Remark,
                    CreateUser        = UserID
                };
                result.result = factory.BuildSettlement(settlemodel);
            }
            catch
            {
                result.msg = "生成结算单异常";
            }
            return(result);
        }
Esempio n. 12
0
        /// <summary>
        /// 生成结算单
        /// </summary>
        /// <param name="PKID">车场编号</param>
        /// <param name="StartTime">开始时间</param>
        /// <param name="EndTime">结束时间</param>
        /// <param name="UserID">用户编号</param>
        /// <returns></returns>
        public static MyResult BuildSettlement(string PKID, DateTime StartTime, DateTime EndTime, string Remark, string UserID)
        {
            MyResult result = new MyResult();

            result.result = false;
            try
            {
                string              priod      = "F00001";
                IParkSettlement     factory    = ParkSettlementFactory.GetFactory();
                ParkSettlementModel settlelist = factory.GetMaxPriodSettlement(PKID);
                if (settlelist != null)
                {
                    if (settlelist.SettleStatus != 2 && settlelist.SettleStatus != -1)
                    {
                        //结算单还在审批中 不能建立新的结算单
                        result.msg = "帐期:" + settlelist.Priod + " 的结算单正在审批中 不能创建新的结算单";
                        return(result);
                    }
                    else
                    {
                        string maxpriod = settlelist.Priod;
                        priod = maxpriod.Substring(0, 1) + int.Parse(maxpriod.Substring(1)).ToString().PadLeft(5, '0');
                    }

                    if (StartTime < settlelist.EndTime)
                    {
                        result.msg = "当前结算单的开始时间不能小于前一个结算单结算时间";
                        return(result);
                    }

                    if (settlelist.EndTime.AddSeconds(1) != StartTime)
                    {
                        result.msg = "提现需要日期连续";
                        return(result);
                    }
                }
                //获取结算金额
                decimal totalamount       = 0;
                decimal handlingfeeamount = 0;
                decimal receivableamount  = 0;
                //List<ParkOrder> orderlist = factory.GetSettlementPayAmount(PKID, StartTime, EndTime);
                List <Statistics_Gather> orderlist = factory.GetSettlementPayAmount(PKID, StartTime, EndTime);
                if (orderlist != null && orderlist.Count > 0)
                {
                    var park = ParkingServices.QueryParkingByParkingID(PKID);
                    if (park == null || park.HandlingFee <= 0)
                    {
                        result.msg = "未配置车场结算费率 不能生成结算单";
                        return(result);
                    }
                    //费率在车场配置
                    decimal handlingfee = park.HandlingFee / 1000;
                    //foreach (var order in orderlist)
                    //{
                    //    //totalamount += order.PayAmount;
                    //    //handlingfeeamount += Math.Round(order.PayAmount * handlingfee, 2);
                    //
                    //}
                    //receivableamount = totalamount - handlingfeeamount;
                    foreach (var order in orderlist)
                    {
                        totalamount += order.OnLine_Amount;
                    }
                    handlingfeeamount = Math.Round(totalamount * handlingfee, 2);
                    receivableamount  = totalamount - handlingfeeamount;
                }
                ParkSettlementModel settlemodel = new ParkSettlementModel()
                {
                    PKID              = PKID,
                    TotalAmount       = totalamount,
                    ReceivableAmount  = receivableamount,
                    HandlingFeeAmount = handlingfeeamount,
                    EndTime           = EndTime,
                    StartTime         = StartTime,
                    Priod             = priod,
                    Remark            = Remark,
                    CreateUser        = UserID
                };
                result.result = factory.BuildSettlement(settlemodel);
            }
            catch
            {
                result.msg = "生成结算单异常";
            }
            return(result);
        }
Esempio n. 13
0
        /// <summary>
        /// 审核通过
        /// </summary>
        /// <param name="recordId"></param>
        /// <returns></returns>
        public static bool Passed(string RecordID, string AuditRemark, string CarTypeID, string CarModelID, string AreaIDS, string GateID, string OperatorId)
        {
            if (string.IsNullOrWhiteSpace(CarTypeID))
            {
                throw new MyException("获取车类失败");
            }
            if (string.IsNullOrWhiteSpace(CarModelID))
            {
                throw new MyException("获取车型失败");
            }

            ParkMonthlyCarApply monthlyCarApply = ParkMonthlyCarApplyServices.QueryByRecordID(RecordID);

            if (monthlyCarApply == null)
            {
                throw new MyException("该申请不存在");
            }
            if (monthlyCarApply.ApplyStatus != MonthlyCarApplyStatus.Applying)
            {
                throw new MyException("该申请是申请中状态");
            }
            monthlyCarApply.CarModelID  = CarModelID;
            monthlyCarApply.CarTypeID   = CarTypeID;
            monthlyCarApply.AuditRemark = AuditRemark;

            BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(monthlyCarApply.PKID);

            if (parking == null)
            {
                throw new MyException("车场信息不存在");
            }

            BaseEmployee  employee  = GenerateBaseEmployeeModel(parking.VID, monthlyCarApply.ApplyName, monthlyCarApply.ApplyMoblie, monthlyCarApply.FamilyAddress);
            EmployeePlate plate     = GenerateEmployeePlateModel(employee, parking.VID, monthlyCarApply.PlateNo);
            BaseCard      card      = GenerateCardModel(parking, employee, plate, OperatorId);
            ParkGrant     parkGrant = GenerateParkGrantModel(parking, plate, card, monthlyCarApply.PKLot, monthlyCarApply.CarModelID, monthlyCarApply.CarTypeID, AreaIDS, GateID);

            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                try
                {
                    dbOperator.BeginTransaction();
                    bool result = ParkGrantServices.Add(employee, plate, card, parkGrant, dbOperator);
                    if (!result)
                    {
                        throw new MyException("保存车辆信息失败");
                    }

                    IParkMonthlyCarApply factory = ParkMonthlyCarApplyFactory.GetFactory();
                    result = factory.Passed(monthlyCarApply, dbOperator);
                    if (!result)
                    {
                        throw new MyException("修改申请状态失败");
                    }

                    dbOperator.CommitTransaction();
                    monthlyCarApply = ParkMonthlyCarApplyServices.QueryByRecordID(monthlyCarApply.RecordID);
                    OperateLogServices.AddOperateLog <ParkMonthlyCarApply>(monthlyCarApply, OperateType.Update);
                    return(result);
                }
                catch
                {
                    dbOperator.RollbackTransaction();
                    throw;
                }
            }
        }
Esempio n. 14
0
        /// <summary>
        /// 白天黑夜最大收费参数设置
        /// </summary>
        //public static DayAndNightMaxMoneyPara DayAndNightMaxMoneyPara { get; set; }

        //private static XDocument document;
        //public static XDocument _XDocument
        //{
        //    get
        //    {
        //        return document;
        //    }
        //    private set
        //    {
        //        document = value;
        //    }
        //}

        //static RateProcesser()
        //{
        //    try
        //    {
        //        string xmlName = "TimeShareFeeRule.xml";
        //        var dirName = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, xmlName);

        //        XDocument xdoc = XDocument.Load(dirName);
        //        foreach (var item in xdoc.Root.Elements())
        //        {
        //            if (item.Attribute("IsEnable").Value.ToBoolean())
        //            {
        //                _XDocument = xdoc;
        //            }
        //            break;
        //        }
        //    }
        //    catch(Exception ex)
        //    {
        //        LogerHelper.Loger.Error(ex);
        //    }
        //}

        //public static void  LoadCustomFeerule(string ruletext)
        //{

        //    try
        //    {
        //        using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(ruletext)))
        //        {
        //            XDocument xdoc = XDocument.Load(stream);
        //            foreach (var item in xdoc.Root.Elements())
        //            {
        //                if (item.Attribute("IsEnable").Value.ToBoolean())
        //                {
        //                    _XDocument = xdoc;
        //                }
        //                break;
        //            }

        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        LogerHelper.Loger.Error(ex);
        //    }
        //}
        /// <summary>
        /// 根据入场记录算费
        /// </summary>
        /// <param name="ioRecord"></param>
        /// <returns></returns>
        public static ResultAgs GetRateResult(ParkIORecord ioRecord, ParkGate outGate, DateTime exitTime, string carModeid = "")
        {
            if (outGate == null)
            {
                return(null);
            }
            string   errorMsg = "";
            InputAgs args     = new InputAgs();

            args.AreadInfo = ParkAreaServices.QueryByRecordId(ioRecord.AreaID);
            if (args.AreadInfo.IsNestArea && args.AreadInfo.Parent == null)//内部车场时 且上级区域为空时
            {
                args.AreadInfo.Parent = ParkAreaServices.QueryByRecordId(args.AreadInfo.MasterID);
                if (args.AreadInfo.Parent == null)//还是找不到上级区域时
                {
                    LogerHelper.Loger.Error(string.Format("找不到车场[{0}]的上级车场,上级车场ID为[{1}].", args.AreadInfo.AreaName, args.AreadInfo.MasterID));
                    args.AreadInfo.MasterID = "";//找不到就至为空
                }
            }
            args.AreadInfo.Parkinfo = ParkingServices.QueryParkingByParkingID(args.AreadInfo.PKID);
            if (args.AreadInfo.Parkinfo == null)//还是找不到上级区域时
            {
                LogerHelper.Loger.Error(string.Format("找不到区域[{0}]对应的车场.", args.AreadInfo.AreaName));
                return(null);
            }
            args.Plateinfo             = new PlateInfo();
            args.Plateinfo.LicenseNum  = ioRecord.PlateNumber;
            args.Plateinfo.TriggerTime = exitTime;
            args.CarTypeInfo           = ParkCarTypeServices.QueryParkCarTypeByRecordId(ioRecord.CarTypeID);
            string        str         = errorMsg;
            EmployeePlate platenumber = EmployeePlateServices.GetEmployeePlateNumberByPlateNumber(args.AreadInfo.Parkinfo.VID, args.Plateinfo.LicenseNum, out errorMsg);

            if (platenumber != null)
            {
                //根据车牌获取车辆用户信息
                var pkcard = ParkGrantServices.GetParkGrantByPlateNumberID(args.AreadInfo.PKID, platenumber.PlateID, out errorMsg);
                if (pkcard.Count() > 0)
                {
                    //判断是否有区域 通道限制
                    var cardinfo = pkcard.First();
                    args.CardInfo = cardinfo;
                    args.CardInfo.OwnerPlateNumber = platenumber;
                    var usercard = BaseCardServices.GetBaseCard(args.CardInfo.CardID, out errorMsg);
                    if (usercard != null)
                    {
                        args.CardInfo.Usercard = usercard;
                    }
                    else
                    {
                        args.CardInfo = null;
                    }
                    if (!args.CardInfo.CarModelID.IsEmpty())
                    {
                        carModeid = args.CardInfo.CarModelID;
                    }
                }
            }

            if (args.CarTypeInfo == null)
            {
                return(null);
            }
            if (carModeid.IsEmpty())
            {
                args.CarModel = ParkCarModelServices.GetDefaultCarModel(args.AreadInfo.PKID, out errorMsg);
            }
            else
            {
                args.CarModel = ParkCarModelServices.QueryByRecordId(carModeid);
                if (args.CarModel == null)
                {
                    args.CarModel = ParkCarModelServices.GetDefaultCarModel(args.AreadInfo.PKID, out errorMsg);
                }
            }
            if (args.CarModel == null)
            {
                return(null);
            }
            //获取默认车类型
            args.GateInfo = outGate;
            args.IORecord = ioRecord;

            ResultAgs rst = new ResultAgs();

            rst.InOutBaseCardType = BaseCarType.TempCar;
            rst.ResCode           = ResultCode.OutOK;
            var rateContext = new RateTemplate();

            rateContext.Process(args, rst);
            return(rst);
        }
Esempio n. 15
0
        /// <summary>
        /// 模拟参数算费
        /// </summary>
        /// <param name="platenumber"></param>
        /// <param name="areaid"></param>
        /// <param name="intime"></param>
        /// <param name="exitTime"></param>
        /// <param name="cartypeID"></param>
        /// <param name="carModeid"></param>
        /// <returns></returns>
        public static ResultAgs GetRateResult(string platenumber, string areaid, DateTime intime, DateTime exitTime, string cartypeID, string carModeid = "")
        {
            if (areaid.IsEmpty())
            {
                return(null);
            }

            string   errorMsg = "";
            InputAgs args     = new InputAgs();

            args.AreadInfo = ParkAreaServices.QueryByRecordId(areaid);

            args.IORecord = new ParkIORecord();
            args.IORecord.EntranceTime = intime;
            args.IORecord.ExitTime     = exitTime;
            args.IORecord.PlateNumber  = platenumber;
            args.IORecord.CarTypeID    = cartypeID;
            args.IORecord.RecordID     = "";
            if (args.AreadInfo.IsNestArea && args.AreadInfo.Parent == null)//内部车场时 且上级区域为空时
            {
                args.AreadInfo.Parent = ParkAreaServices.QueryByRecordId(args.AreadInfo.MasterID);
                if (args.AreadInfo.Parent == null)//还是找不到上级区域时
                {
                    LogerHelper.Loger.Error(string.Format("找不到车场[{0}]的上级车场,上级车场ID为[{1}].", args.AreadInfo.AreaName, args.AreadInfo.MasterID));
                    args.AreadInfo.MasterID = "";//找不到就至为空
                }
            }
            args.AreadInfo.Parkinfo = ParkingServices.QueryParkingByParkingID(args.AreadInfo.PKID);
            if (args.AreadInfo.Parkinfo == null)//还是找不到上级区域时
            {
                LogerHelper.Loger.Error(string.Format("找不到区域[{0}]对应的车场.", args.AreadInfo.AreaName));
                return(null);
            }
            args.Plateinfo             = new PlateInfo();
            args.Plateinfo.LicenseNum  = platenumber;
            args.Plateinfo.TriggerTime = exitTime;
            args.CarTypeInfo           = ParkCarTypeServices.QueryParkCarTypeByRecordId(cartypeID);

            if (args.CarTypeInfo == null)
            {
                return(null);
            }
            if (carModeid.IsEmpty())
            {
                args.CarModel = ParkCarModelServices.GetDefaultCarModel(args.AreadInfo.PKID, out errorMsg);
            }
            else
            {
                args.CarModel = ParkCarModelServices.QueryByRecordId(carModeid);
            }
            if (args.CarModel == null)
            {
                return(null);
            }
            //获取默认车类型
            args.GateInfo         = new ParkGate();
            args.GateInfo.IoState = IoState.GoOut;
            ResultAgs rst = new ResultAgs();

            rst.InOutBaseCardType = BaseCarType.TempCar;
            rst.ResCode           = ResultCode.OutOK;
            var rateContext = new RateTemplate();

            rateContext.Process(args, rst);
            return(rst);
        }
Esempio n. 16
0
        private static TempParkingFeeResult SFMTransforTempParkingFeeResult(TempParkingFeeResult model, OutCarInfoResult sfmResult)
        {
            if (!sfmResult.Success || sfmResult.Data == null)
            {
                return(model);
            }
            if (sfmResult.Code == "400")
            {
                model.Result = APPResult.AmountIsNot;
                return(model);
            }
            if (sfmResult.Code != "0000")
            {
                model.Result = APPResult.OtherException;
                return(model);
            }
            SMFOutCarInfo payInfo = sfmResult.Data;

            if (!payInfo.payAmount.HasValue || payInfo.payAmount <= 0)
            {
                model.Result = APPResult.NoNeedPay;
                return(model);
            }

            TempParkingFeeResult result = new TempParkingFeeResult();

            result.OrderSource = PayOrderSource.SFM;
            result.PlateNumber = payInfo.carNo;
            result.CardNo      = payInfo.carNo;

            result.ParkingID = SFMPKID;

            result.ExternalPKID = payInfo.Parking_Key;
            BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(SystemDefaultConfig.SFMPKID);

            if (parking != null)
            {
                result.ParkName = parking.PKName;
            }
            result.EntranceDate = DateTime.Parse(payInfo.enterTime);
            result.OutTime      = payInfo.freeTimeout.HasValue ? payInfo.freeTimeout.Value : 10;
            result.isAdd        = true;
            result.PayDate      = DateTime.Now;
            ParkOrder order = new ParkOrder();

            order.RecordID  = payInfo.ParkOrder_OrderNo;
            order.OrderNo   = payInfo.ParkOrder_OrderNo;
            order.TagID     = "1";
            order.OrderType = OrderType.TempCardPayment;
            order.PayWay    = OrderPayWay.WeiXin;

            order.DiscountAmount = payInfo.couponAmount.HasValue ? payInfo.couponAmount.Value : 0;
            order.Amount         = payInfo.totalAmount.HasValue ? payInfo.totalAmount.Value : 0;
            order.UnPayAmount    = 0;
            order.PayAmount      = payInfo.payAmount.HasValue ? payInfo.payAmount.Value : 0;

            order.CarderateID   = "";
            order.Status        = 0;
            order.OrderSource   = OrderSource.WeiXin;
            order.OrderTime     = DateTime.Now;
            order.PayTime       = DateTime.Now;
            order.PKID          = SFMPKID;
            order.UserID        = "";
            order.OnlineUserID  = "";
            order.OnlineOrderNo = "";
            order.Remark        = "";
            result.Pkorder      = order;
            result.OrderSource  = PayOrderSource.SFM;
            return(result);
        }