Esempio n. 1
0
        /// <summary>
        /// 模板数据格式化字符串
        /// </summary>
        /// <param name="model">计费模板模型</param>
        /// <param name="carType">0:时租车  2:储值车</param>
        /// <returns></returns>
        private string TemplateDataFormatStr(BillingTemplateModel model, CarTypeEnum carType)
        {
            string          templateStr = string.Empty;
            ITollCalculator tollModel   = TemplateDataFormat(model);

            if (tollModel != null)
            {
                templateStr = tollModel.GetTollFeesTemplateStr(model);
            }

            //模板字符串前缀 说明:T0100015  T:临时卡 R:储值卡   01:第一套算费模板   00015:出场免费时间(单位分钟)
            string prefix = "";

            if (carType == CarTypeEnum.TempCar)
            {
                prefix = "T";
            }
            else if (carType == CarTypeEnum.ValueCar)
            {
                prefix = "R";
            }
            else
            {
                return("");
            }
            string templateIndex = model.ChargeMode.ToString().PadLeft(2, '0');
            string timeOut       = tollModel.GetLeaveTimeOut(model).ToString().PadLeft(5, '0');

            prefix = prefix + templateIndex + timeOut;

            //示例 T0100015300102030405060708090A0A0A0A0A0A0A0A0A0A0A0A0A0A0AFFFFFF00000000
            templateStr = prefix + templateStr;
            return(templateStr);
        }
Esempio n. 2
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <ShenZhengTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.FreeMinutes.ToString().PadLeft(2, '0')
                          + model.RHBeginTime.ToString("HHmm") + model.RHEndTime.ToString("HHmm")
                          + Convert.ToInt32(model.RHFirstHour).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.NRHFirstHour).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.NWDFirstHour).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.RHEveryHalfHour).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NRHEveryHour).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NWDEveryHour).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.WDEveryDay).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.NWDEveryDay).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.AmountTopLimit).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.EveryDay).ToString("X").PadLeft(2, '0')
                ;
                string EightKz = "000000" + model.TollFlag.ToString() + (model.MonetaryUnit == 1 ? "0" : "1");
                strtoll += string.Format("{0:x}", Convert.ToInt32(EightKz.ToString(), 2)).PadLeft(2, '0');
                strtoll += model.Timeout.ToString().PadLeft(2, '0');
                strtoll += "00".PadLeft(18, '0');
            }
            return(strtoll + ShenZhengHolidayBizData);
        }
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SimpleSegmentTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.FreeMinutes.ToString("X").PadLeft(2, '0') +
                          model.DayBeginTime.ToString("HHmm") + model.DayEndTime.ToString("HHmm")
                          + Convert.ToInt32(model.DayMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayMaxMoney).ToString("X").PadLeft(4, '0')
                          + MinuteToHour(model.DayMinute)
                          + Convert.ToInt32(model.DayFirstMoney).ToString("X").PadLeft(2, '0')
                          + MinuteToHour(model.NightMinute)
                          + Convert.ToInt32(model.NightFirstMoney).ToString("X").PadLeft(2, '0');
                double nPow  = System.Math.Pow(Convert.ToDouble(2), Convert.ToDouble(model.SpanProcessing));
                int    nSpan = (int)nPow;
                strtoll += nSpan.ToString("X").PadLeft(2, Convert.ToChar("0"));
                strtoll += (model.MonetaryUnit == 1 ? "00" : "01") + "00".PadLeft(30, '0');
            }
            return(strtoll);
        }
Esempio n. 4
0
        /// <summary>
        /// 添加计费模板
        /// </summary>
        /// <returns></returns>
        public bool AddNewBillingTemplate(BillingTemplateModel model)
        {
            //当前车类是否存在
            CarTypeModel carTypeModel = _iCarTypeContext.GetCarType(model.CarTypeGuid);

            if (carTypeModel == null || (carTypeModel.CarType != CarTypeEnum.TempCar && carTypeModel.CarType != CarTypeEnum.ValueCar))
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_NOTEXISTS_CARTYPE.GetDesc();
                return(false);
            }


            bool flag = _iBillingTemplateContext.AddBillingTemplate(model);

            if (!flag)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_SAVE_BILLING.GetDesc();
                return(false);
            }

            //将数据进行格式化,再同步到主平台
            bool toFujicaResult = AddTemplateDataToFujica(model, carTypeModel.CarType);

            if (!toFujicaResult)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_SAVE_BILLING_TOFUJICA.GetDesc();
            }
            return(toFujicaResult);
        }
Esempio n. 5
0
        /// <summary>
        /// 修改计费模板
        /// </summary>
        /// <returns></returns>
        public bool ModifyBillingTemplate(BillingTemplateModel model)
        {
            //当前车类是否存在
            CarTypeModel carTypeModel = _iCarTypeContext.GetCarType(model.CarTypeGuid);

            if (carTypeModel == null || (carTypeModel.CarType != CarTypeEnum.TempCar && carTypeModel.CarType != CarTypeEnum.ValueCar))
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_NOTEXISTS_CARTYPE.GetDesc();
                return(false);
            }

            bool flag = _iBillingTemplateContext.ModifyBillingTemplate(model);

            if (!flag)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_SAVE_BILLING.GetDesc();
                return(false);
            }

            //下发缴费模板给相机(车类对应缴费模板)
            SendTempCarTypeOfPlateColor(model.ProjectGuid, model.ParkCode);

            //将数据进行格式化,再同步到主平台
            bool toFujicaResult = EditTemplateDataToFujica(model, carTypeModel.CarType);

            if (!toFujicaResult)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_SAVE_BILLING_TOFUJICA.GetDesc();
            }
            return(toFujicaResult);
        }
Esempio n. 6
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SegmentHourlyTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.FreeMinutes.ToString("X").PadLeft(2, '0') +
                          model.DayBeginTime.ToString("HHmm") + model.DayEndTime.ToString("HHmm")
                          + model.DayFirstHour.ToString().PadLeft(2, '0')
                          + model.DayPerHour.ToString().PadLeft(2, '0')
                          + Convert.ToInt32(model.DayFirstMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayNextMoney).ToString("X").PadLeft(2, '0')
                          + model.NightFirstHour.ToString().PadLeft(2, '0')
                          + model.NightPerHour.ToString().PadLeft(2, '0')
                          + Convert.ToInt32(model.NightFirstMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightNextMoney).ToString("X").PadLeft(2, '0')
                          + model.Timeout.ToString().PadLeft(2, '0')
                          + Convert.ToInt32(model.MaxDayMoney).ToString("X").PadLeft(4, '0')
                ;
                strtoll += (model.SpanProcessing == 1 ? "01" : "02");
                strtoll += (model.MonetaryUnit == 1 ? "00" : "01") + "00".PadLeft(28, '0');
            }
            return(strtoll);
        }
Esempio n. 7
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <HalfHourTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.DayFreeMinutes.ToString("X").PadLeft(2, '0') + model.NightFreeMinutes.ToString("X").PadLeft(2, '0') +
                          model.DayBeginTime.ToString("HHmm") + model.DayEndTime.ToString("HHmm") +
                          model.DayFirstHour.ToString("X").PadLeft(2, '0') +
                          Convert.ToInt32(model.DayFirstMoney).ToString("X").PadLeft(2, '0') +
                          model.DayNextHour.ToString("X").PadLeft(2, '0') +
                          Convert.ToInt32(model.DayNextMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayTimeout).ToString().PadLeft(2, '0')
                          + model.NightFirstHour.ToString("X").PadLeft(2, '0') +
                          Convert.ToInt32(model.NightFirstMoney).ToString("X").PadLeft(2, '0') +
                          model.NightNextHour.ToString("X").PadLeft(2, '0') +
                          Convert.ToInt32(model.NightNextMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightTimeout).ToString().PadLeft(2, '0')
                          + Convert.ToInt32(model.MaxDayMoney).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.MaxMoney).ToString("X").PadLeft(4, '0')
                          + (model.MonetaryUnit == 1 ? "00" : "01") + "0".PadLeft(22, '0');
            }
            return(strtoll);
        }
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SegmentQuarterHourTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                string DayTimeOut = model.DayTimeOut.ToString().PadLeft(2, '0');

                string NightTimeOut = model.NightTimeOut.ToString().PadLeft(2, '0');
                if (model.FeeSet10 == 1)
                {
                    //16进制
                    DayTimeOut   = Convert.ToInt32(model.DayTimeOut).ToString("X").PadLeft(2, '0');
                    NightTimeOut = Convert.ToInt32(model.NightTimeOut).ToString("X").PadLeft(2, '0');
                }
                strtoll = "00" +
                          model.DayBeginTime.ToString("HHmm") + model.DayEndTime.ToString("HHmm")
                          + model.DayFreeMinutes.ToString("X").PadLeft(2, '0')
                          + model.DayFirstTime.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayFirstMoney).ToString("X").PadLeft(4, '0')
                          + model.DayNextTime.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayNextMoney).ToString("X").PadLeft(4, '0')
                          + DayTimeOut
                          + Convert.ToInt32(model.DayMaxMoney).ToString("X").PadLeft(4, '0')
                          + model.NightFreeMinutes.ToString("X").PadLeft(2, '0')
                          + model.NightFirstTime.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightFirstMoney).ToString("X").PadLeft(4, '0')
                          + model.NightNextTime.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightNextMoney).ToString("X").PadLeft(4, '0')
                          + NightTimeOut
                          + Convert.ToInt32(model.NightMaxMoney).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.DayTopLimit).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.AmountTopLimit).ToString("X").PadLeft(4, '0')
                ;
                string EightKz = model.FeeSet8.ToString()
                                 + model.FeeSet7.ToString()
                                 + model.FeeSet6.ToString()
                                 + model.FeeSet5.ToString()
                                 + model.FeeSet4.ToString()
                                 + model.FeeSet3.ToString()
                                 + model.FeeSet2.ToString()
                                 + model.FeeSet1.ToString();
                strtoll += string.Format("{0:x}", Convert.ToInt32(EightKz.ToString(), 2)).PadLeft(2, '0');
                //0 角 1元 2  分

                EightKz  = "000";
                EightKz += model.FeeSet10 == 1 ? "1" : "0";
                EightKz += model.FeeSet9 == 0 ? "01" : model.FeeSet9 == 1 ? "10" : "00";
                EightKz += model.MonetaryUnit == 0 ? "01" : model.MonetaryUnit == 1 ? "00" : "10";

                strtoll += string.Format("{0:x}", Convert.ToInt32(EightKz.ToString(), 2)).PadLeft(2, '0');
                strtoll += "00";
            }
            return(strtoll);
        }
Esempio n. 9
0
        /// <summary>
        /// 计算费用 -1:计算失败
        /// </summary>
        /// <param name="beginTime">计费起始时间</param>
        /// <param name="endTime">计费截止时间</param>
        /// <param name="hasFreeMinute">是否有免费分钟</param>
        /// <returns></returns>
        public decimal GetFees(BillingTemplateModel _model, DateTime beginTime, DateTime endTime, bool hasFreeMinute)
        {
            model = m_serializer.Deserialize <SegmentNoneHalfHourTollModel>(_model.TemplateJson);
            decimal parktollmoney = -1;

            parktollmoney = Park_CalParkingFee(beginTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss"), !hasFreeMinute ? 1 : 0, 7, GetTollFeesTemplateStr());
            parktollmoney = parktollmoney / 100;
            return(parktollmoney);
        }
Esempio n. 10
0
        /// <summary>
        /// 删除计费模板
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool DeleteBillingTemplate(BillingTemplateModel model)
        {
            redisoperate.model = model;
            bool flag = databaseoperate.DeleteInDataBase(model);

            if (!flag)
            {
                return(false);       //数据库不成功就不要往下执行了
            }
            return(redisoperate.DeleteInRedis());
        }
Esempio n. 11
0
        /// <summary>
        /// 修改计费模板
        /// </summary>
        /// <returns></returns>
        public bool ModifyBillingTemplate(BillingTemplateModel model)
        {
            redisoperate.model = model;
            bool flag = databaseoperate.SaveToDataBase(model);

            if (flag)
            {
                redisoperate.SaveToRedis();       //此时不需要判断redis是否成功,因为修改时redis一定会返回false
            }
            return(flag);
        }
Esempio n. 12
0
        /// <summary>
        /// 获得模板数据的超时时长
        /// </summary>
        /// <param name="chargeMode">计费方式</param>
        /// <returns>分钟数</returns>
        private static int TemplateDataTimeOut(BillingTemplateModel model, ILogger m_logger, ISerializer m_serializer)
        {
            int             timeOut   = 0;
            ITollCalculator tollModel = null;

            switch (model.ChargeMode)
            {
            case 1:
                tollModel = new TollCalculator_Hourly(m_logger, m_serializer);
                break;

            case 2:
                tollModel = new TollCalculator_Segment(m_logger, m_serializer);
                break;

            case 3:
                tollModel = new TollCalculator_ShenZheng(m_logger, m_serializer);
                break;

            case 4:
                tollModel = new TollCalculator_HalfHourly(m_logger, m_serializer);
                break;

            case 5:
                tollModel = new TollCalculator_SimpleSegment(m_logger, m_serializer);
                break;

            case 6:
                tollModel = new TollCalculator_SegmentHourly(m_logger, m_serializer);
                break;

            case 7:
                tollModel = new TollCalculator_SegmentNone(m_logger, m_serializer);
                break;

            case 8:
                tollModel = new TollCalculator_SegmentHalfHour(m_logger, m_serializer);
                break;

            case 9:
                tollModel = new TollCalculator_NewSegment(m_logger, m_serializer);
                break;

            case 10:
                tollModel = new TollCalculator_SegmentQuarterHour(m_logger, m_serializer);
                break;
            }
            if (tollModel != null)
            {
                timeOut = tollModel.GetLeaveTimeOut(model);
            }
            return(timeOut);
        }
Esempio n. 13
0
        /// <summary>
        /// 修改-模板数据同步到主平台Fujica
        /// </summary>
        /// <param name="model">计费模板模型</param>
        /// <param name="carType">0:时租车  2:储值车</param>
        /// <returns></returns>
        private bool EditTemplateDataToFujica(BillingTemplateModel model, CarTypeEnum carType)
        {
            //1、根据不同的计费方式将数据进行格式化
            string templateStr = TemplateDataFormatStr(model, carType);

            //2、格式化后数据同步到主平台
            if (!string.IsNullOrEmpty(templateStr))
            {
                return(TemplateDataToFujica(model.CarTypeGuid, 2, templateStr, carType));
            }
            return(false);
        }
Esempio n. 14
0
 /// <summary>
 /// 获取出场超时时长
 /// </summary>
 /// <returns></returns>
 public int GetLeaveTimeOut(BillingTemplateModel _model)
 {
     try
     {
         model = m_serializer.Deserialize <SegmentNoneHalfHourTollModel>(_model.TemplateJson);
         return(model.LeaveTimeout);
     }
     catch
     {
         return(0);
     }
 }
Esempio n. 15
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <NewSegmentTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                try
                {
                    string time1 = model.BeginTime.Split(':')[0].PadLeft(2, '0');
                    string time2 = model.BeginTime.Split(':')[1].PadLeft(2, '0');
                    string time3 = model.EndTime.Split(':')[0].PadLeft(2, '0');
                    string time4 = model.EndTime.Split(':')[1].PadLeft(2, '0');
                    strtoll = model.FreeMinutes.ToString("X").PadLeft(2, '0') + time1 + time2 + time3 + time4 + model.DayTimeSt1.ToString("X").PadLeft(2, '0') +
                              model.DayTimeFt1.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.DayTimeFee1).ToString("X").PadLeft(2, '0') +
                              model.DayTimeSt2.ToString("X").PadLeft(2, '0') +
                              model.DayTimeFt2.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.DayTimeFee2).ToString("X").PadLeft(2, '0') +
                              //model.DayTimeSt3.ToString("X").PadLeft(2, '0') +
                              model.DayTimeFt3.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.DayTimeFee3).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.DayTimeMaxAmount).ToString("X").PadLeft(4, '0')
                              + model.NightTimeSt1.ToString("X").PadLeft(2, '0') +
                              model.NightTimeFt1.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.NightTimeFee1).ToString("X").PadLeft(2, '0') +
                              model.NightTimeSt2.ToString("X").PadLeft(2, '0') +
                              model.NightTimeFt2.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.NightTimeFee2).ToString("X").PadLeft(2, '0') +
                              //model.NightTimeSt3.ToString("X").PadLeft(2, '0') +
                              model.NightTimeFt3.ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.NightTimeFee3).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.NightTimeMaxAmount).ToString("X").PadLeft(4, '0') +
                              model.Timeout.ToString().PadLeft(2, '0') +
                              Convert.ToInt32(model.DayTopLimit).ToString("X").PadLeft(4, '0');
                    string bin = "000" + model.CrossSegmentsType + model.CrossSegmentsFreeType +
                                 model.FreeTreatType + model.FreeTreatTypeIsEnable + model.NoSegmentedIsEnable;
                    strtoll += string.Format("{0:x}", Convert.ToInt32(bin, 2)).PadLeft(2, '0');
                    bin      = model.MonetaryUnit == 1 ? "00000000" : "00000001";
                    strtoll += string.Format("{0:x}", Convert.ToInt32(bin, 2)).PadLeft(2, '0');
                    strtoll += "0000";
                }
                catch
                {
                }
            }
            return(strtoll);
        }
Esempio n. 16
0
        public static void Execute()
        {
            Task.Factory.StartNew(() =>
            {
                ILogger m_ilogger         = new Logger.Logger();
                ISerializer m_serializer  = new JsonSerializer(m_ilogger);
                RabbitMQPeeker m_rabbitMQ = new RabbitMQPeeker(m_ilogger, m_serializer);
                IDatabase db;

                //队列
                string queue = "";
                //路由key
                string routingKey = "";

                m_rabbitMQ.PeekMessageByRabbitMQ(queue, routingKey, (string content) =>
                {
                    //转换成Fujica缴费实体
                    IssuedRecord payModel = m_serializer.Deserialize <IssuedRecord>(content);
                    if (payModel != null)
                    {
                        //验证当前是否临时车
                        if (payModel.CardType == 3)
                        {
                            //验证当前车牌是否在场
                            string carNumber = payModel.CarNo;
                            int dbIndex      = GetDatabaseNumber(carNumber);
                            db = FollowRedisHelper.GetDatabase(dbIndex);
                            //去redis中查询车辆是否在场,返回在场实体
                            VehicleEntryDetailModel entryModel = m_serializer.Deserialize <VehicleEntryDetailModel>(db.HashGet(carNumber, payModel.ParkingCode));
                            //不为空,则代表车辆在场
                            if (entryModel != null)
                            {
                                //fujica缴费实体传过来的“停车记录编号”和本系统中的“当次停车唯一标识”的值相等,确认是同一条记录
                                if (payModel.OffLineOrderId == entryModel.RecordGuid)
                                {
                                    //查询当前车辆的计费模板,以获取缴费超时时间,计算最后出场时间
                                    db = FollowRedisHelper.GetDatabase(0);
                                    BillingTemplateModel billingModel = m_serializer.Deserialize <BillingTemplateModel>(db.HashGet("BillingTemplateList", entryModel.CarTypeGuid));
                                    int timeOut = TemplateDataTimeOut(billingModel, m_ilogger, m_serializer);

                                    //发送缴费数据到相机
                                    SendPayData.Execute(entryModel.ParkingCode, entryModel.RecordGuid, entryModel.CarNo, entryModel.BeginTime, payModel.FeeEndTime.AddMinutes(timeOut));
                                }
                            }
                        }
                    }

                    return(RabbitMQAction.ACCEPT);
                });
            });
        }
Esempio n. 17
0
        /// <summary>
        /// 模板数据进行格式化
        /// </summary>
        /// <param name="chargeMode">计费方式</param>
        /// <returns></returns>
        private ITollCalculator TemplateDataFormat(BillingTemplateModel model)
        {
            ITollCalculator tollModel = null;

            switch (model.ChargeMode)
            {
            case 1:
                tollModel = new TollCalculator_Hourly(m_logger, m_serializer);
                break;

            case 2:
                tollModel = new TollCalculator_Segment(m_logger, m_serializer);
                break;

            case 3:
                tollModel = new TollCalculator_ShenZheng(m_logger, m_serializer);
                break;

            case 4:
                tollModel = new TollCalculator_HalfHourly(m_logger, m_serializer);
                break;

            case 5:
                tollModel = new TollCalculator_SimpleSegment(m_logger, m_serializer);
                break;

            case 6:
                tollModel = new TollCalculator_SegmentHourly(m_logger, m_serializer);
                break;

            case 7:
                tollModel = new TollCalculator_SegmentNone(m_logger, m_serializer);
                break;

            case 8:
                tollModel = new TollCalculator_SegmentHalfHour(m_logger, m_serializer);
                break;

            case 9:
                tollModel = new TollCalculator_NewSegment(m_logger, m_serializer);
                break;

            case 10:
                tollModel = new TollCalculator_SegmentQuarterHour(m_logger, m_serializer);
                break;
            }
            return(tollModel);
        }
Esempio n. 18
0
        /// <summary>
        /// 删除车类
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool DeleteCarType(CarTypeModel model)
        {
            bool flag = false;

            //删除计费模板
            if (model.CarType == CarTypeEnum.TempCar || model.CarType == CarTypeEnum.ValueCar)
            {
                //如果当前车类为临时车或者储值车
                //判断该车类是否已创建计费模板
                BillingTemplateModel billingModel = GetBillingTemplate(model.Guid);
                if (billingModel != null)
                {
                    //计费模板存在则需要先删除计费模板
                    flag = DeleteBillingTemplate(billingModel);
                    if (!flag)
                    {
                        return(flag);
                    }
                }
            }
            else
            {
                //删除固定车延期模板
                PermanentTemplateModel permanentModel = GetPermanentTemplate(model.Guid);
                if (permanentModel != null)
                {
                    //如果存在则删除固定车延期模板
                    flag = DeletePermanentTemplate(permanentModel);
                    if (!flag)
                    {
                        return(flag);
                    }
                }
            }

            flag = _iCarTypeContext.DeleteCarType(model);
            if (!flag)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_DELETE_CARTYPE.GetDesc();
                return(false);
            }
            return(flag);
        }
Esempio n. 19
0
        /// <summary>
        /// 删除计费模板
        /// </summary>
        /// <returns></returns>
        public bool DeleteBillingTemplate(BillingTemplateModel model)
        {
            bool flag = _iBillingTemplateContext.DeleteBillingTemplate(model);

            if (!flag)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_DELETE_BILLING.GetDesc();
                return(false);
            }

            //将删除数据进行格式化,再同步到主平台
            bool toFujicaResult = DeleteTemplateDataToFujica(model.CarTypeGuid);

            if (!toFujicaResult)
            {
                LastErrorDescribe = BussinessErrorCodeEnum.BUSINESS_SAVE_BILLING_TOFUJICA.GetDesc();
            }
            return(toFujicaResult);
        }
Esempio n. 20
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SegmentNoneHalfHourTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.FreeMinutes.ToString("X").PadLeft(2, '0')
                          + model.FirstHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.FirstMoney).ToString("X").PadLeft(2, '0')
                          + model.NextHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NextMoney).ToString("X").PadLeft(2, '0')
                          + model.Timeout.ToString().PadLeft(2, '0');
                strtoll += (model.MonetaryUnit == 1 ? "00" : "01") + "00".PadLeft(50, '0');
            }
            return(strtoll);
        }
Esempio n. 21
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strHourtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <HourlyTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strHourtoll = model.FreeMinutes.ToString().PadLeft(2, '0') +
                              Convert.ToInt32(model.h1).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h2).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h3).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h4).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h5).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h6).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h7).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h8).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h9).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h10).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h11).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h12).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h13).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h14).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h15).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h16).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h17).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h18).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h19).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h20).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h21).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h22).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h23).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.h24).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.DayAmountTopLimit).ToString("X").PadLeft(2, '0') +
                              Convert.ToInt32(model.AmountTopLimit).ToString("X").PadLeft(4, '0') +
                              (model.MonetaryUnit == 1 ? "00" : "01") + "000000";
            }
            return(strHourtoll);
        }
Esempio n. 22
0
        /// <summary>
        /// 获取某计费模板
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public BillingTemplateModel GetBillingTemplate(string carTypeGuid)
        {
            BillingTemplateModel model = null;

            redisoperate.model = new BillingTemplateModel()
            {
                CarTypeGuid = carTypeGuid
            };
            model = redisoperate.GetFromRedis();
            //从数据库读
            if (model == null)
            {
                model = databaseoperate.GetFromDataBase(carTypeGuid);
                //缓存到redis
                if (model != null)
                {
                    redisoperate.model = model;
                    redisoperate.SaveToRedis();
                }
            }
            return(model);
        }
Esempio n. 23
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SegmentHalfHourTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.FreeMinutes.ToString("X").PadLeft(2, '0')
                          + model.DayBeginTime.ToString("HHmm") + model.DayEndTime.ToString("HHmm")
                          + model.DayFirstHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayFirstMoney).ToString("X").PadLeft(2, '0')
                          + model.DayNextHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayNextMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.DayMaxMoney).ToString("X").PadLeft(4, '0')
                          + model.NightFirstHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightFirstMoney).ToString("X").PadLeft(2, '0')
                          + model.NightNextHalfHour.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightNextMoney).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.NightMaxMoney).ToString("X").PadLeft(4, '0')
                          + model.TimeOut.ToString().PadLeft(2, '0')
                          + Convert.ToInt32(model.DayTopLimit).ToString("X").PadLeft(4, '0')
                          + Convert.ToInt32(model.AmountTopLimit).ToString("X").PadLeft(4, '0')
                ;
                StringBuilder EightKz = new StringBuilder();
                EightKz.Append("0000");
                if (model.FeeSet4 == 1)
                {
                    EightKz.Append("1");
                }
                else
                {
                    EightKz.Append("0");
                }
                if (model.FeeSet3 == 1)
                {
                    EightKz.Append("1");
                }
                else
                {
                    EightKz.Append("0");
                }
                if (model.FeeSet2 == 1)
                {
                    EightKz.Append("1");
                }
                else
                {
                    EightKz.Append("0");
                }
                if (model.FeeSet1 == 1)
                {
                    EightKz.Append("1");
                }
                else
                {
                    EightKz.Append("0");
                }
                strtoll += string.Format("{0:x}", Convert.ToInt32(EightKz.ToString(), 2)).PadLeft(2, '0');
                strtoll += (model.MonetaryUnit == 1 ? "00" : "01") + "00".PadLeft(16, '0');
            }
            return(strtoll);
        }
Esempio n. 24
0
        /// <summary>
        /// 获取收费模板字符串
        /// </summary>
        /// <returns></returns>
        public string GetTollFeesTemplateStr(BillingTemplateModel _model = null)
        {
            string strtoll = string.Empty;

            if (_model != null)
            {
                model = m_serializer.Deserialize <SegmentTollModel>(_model.TemplateJson);
            }
            if (model != null)
            {
                strtoll = model.BeginTime1.ToString("HHmm") +
                          model.BeginTime2.ToString("HHmm") +
                          (model.BeginTime3.ToString("HHmm") == "0000" ? "FFFF" : model.BeginTime3.ToString("HHmm"))
                          + model.FreeMinute1.ToString("X").PadLeft(2, '0')
                          + model.FreeMinute2.ToString("X").PadLeft(2, '0')
                          + model.FreeMinute3.ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.Fee1).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.Fee2).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.Fee3).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.MaxDayMoney).ToString("X").PadLeft(2, '0')
                          + MinuteToHour(model.SameTimeFreeMinute)
                          + Convert.ToInt32(model.SameTimeMoney1).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.SameTimeMoney2).ToString("X").PadLeft(2, '0')
                          + Convert.ToInt32(model.SameTimeMoney3).ToString("X").PadLeft(2, '0')
                          + MinuteToHour(model.SpanFreeMinute)
                          + ((int)System.Math.Pow(Convert.ToDouble(2), Convert.ToDouble(model.SpanNoOut))).ToString("X").PadLeft(2, Convert.ToChar("0"))
                          + Convert.ToInt32(model.SpanNoOutMoney).ToString("X").PadLeft(2, '0')
                          + ((int)System.Math.Pow(Convert.ToDouble(2), Convert.ToDouble(model.SpanOut))).ToString("X").PadLeft(2, Convert.ToChar("0"))
                          + Convert.ToInt32(model.SpanOutMoney).ToString("X").PadLeft(2, '0')

                          + MinuteToHour(model.OverFreeMinute)
                          + ((int)System.Math.Pow(Convert.ToDouble(2), Convert.ToDouble(model.OverNoOut))).ToString("X").PadLeft(2, Convert.ToChar("0"))
                          + Convert.ToInt32(model.OverNoOutMoney).ToString("X").PadLeft(2, '0')
                          + ((int)System.Math.Pow(Convert.ToDouble(2), Convert.ToDouble(model.OverOut))).ToString("X").PadLeft(2, Convert.ToChar("0"))
                          + Convert.ToInt32(model.OverOutMoney).ToString("X").PadLeft(2, '0');
                string strTemp = "";
                if (model.MonetaryUnit == 1)
                {
                    strTemp = "0000";
                }
                else
                {
                    strTemp = "0001";
                }
                if (model.OverMaxValue == 1)
                {
                    strTemp += "1";
                }
                else
                {
                    strTemp += "0";
                }
                if (model.SpanAccount == 1)
                {
                    strTemp += "1";
                }
                else
                {
                    strTemp += "0";
                }
                strTemp += model.OverFlag.ToString();
                if (model.FreeMiniteAll == 1)
                {
                    strTemp += "1";
                }
                else
                {
                    strTemp += "0";
                }
                strtoll += string.Format("{0:x}", Convert.ToInt32(strTemp.ToString(), 2)).PadLeft(2, '0') + "00";
            }
            return(strtoll);
        }
Esempio n. 25
0
        /// <summary>
        /// 获取计费模板
        /// 具体计费方式的基础模型(包含免费时长、超时出场时长)
        /// </summary>
        /// <param name="carTypeGuid"></param>
        /// <returns></returns>
        public BillingTemplateChargeModel GetBillingTemplateChargeModel(string carTypeGuid)
        {
            BillingTemplateModel model = GetBillingTemplate(carTypeGuid);

            if (model == null)
            {
                return(null);
            }

            BillingTemplateChargeModel chargeModel = new BillingTemplateChargeModel();

            chargeModel.CarTypeGuid = carTypeGuid;

            switch (model.ChargeMode)
            {
            case 1:
                HourlyTollModel hourlyModel = m_serializer.Deserialize <HourlyTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = hourlyModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = hourlyModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 2:
                SegmentTollModel segmentModel = m_serializer.Deserialize <SegmentTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = segmentModel.FreeMinute1;
                chargeModel.FreeMinutes2  = segmentModel.FreeMinute2;
                chargeModel.FreeMinutes3  = segmentModel.FreeMinute3;
                chargeModel.LeaveTimeout1 = segmentModel.LeaveTimeout;
                chargeModel.LeaveTimeout2 = segmentModel.LeaveTimeout;
                chargeModel.LeaveTimeout3 = segmentModel.LeaveTimeout;
                chargeModel.BeginTime1    = segmentModel.BeginTime1.ToShortTimeString();
                chargeModel.BeginTime2    = segmentModel.BeginTime2.ToShortTimeString();
                chargeModel.BeginTime3    = segmentModel.BeginTime3.ToShortTimeString();
                chargeModel.EndTime1      = segmentModel.EndTime1.ToShortTimeString();
                chargeModel.EndTime2      = segmentModel.EndTime2.ToShortTimeString();
                chargeModel.EndTime3      = segmentModel.EndTime3.ToShortTimeString();
                break;

            case 3:
                ShenZhengTollModel shezhenModel = m_serializer.Deserialize <ShenZhengTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = shezhenModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = shezhenModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 4:
                HalfHourTollModel halfHourModel = m_serializer.Deserialize <HalfHourTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = halfHourModel.DayFreeMinutes;
                chargeModel.LeaveTimeout1 = halfHourModel.LeaveTimeout;
                chargeModel.BeginTime1    = halfHourModel.DayBeginTime.ToShortTimeString();
                chargeModel.EndTime1      = halfHourModel.DayEndTime.ToShortTimeString();
                chargeModel.FreeMinutes2  = halfHourModel.NightFreeMinutes;
                chargeModel.LeaveTimeout2 = halfHourModel.LeaveTimeout;
                chargeModel.BeginTime2    = halfHourModel.DayEndTime.ToShortTimeString();
                chargeModel.EndTime2      = halfHourModel.DayBeginTime.ToShortTimeString();
                break;

            case 5:
                SimpleSegmentTollModel simpleSegmentModel = m_serializer.Deserialize <SimpleSegmentTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = simpleSegmentModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = simpleSegmentModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 6:
                SegmentHourlyTollModel sementHourlyModel = m_serializer.Deserialize <SegmentHourlyTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = sementHourlyModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = sementHourlyModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 7:
                SegmentNoneHalfHourTollModel segmentNoneHalfHourModel = m_serializer.Deserialize <SegmentNoneHalfHourTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = segmentNoneHalfHourModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = segmentNoneHalfHourModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 8:
                SegmentHalfHourTollModel segmentHalfHourModel = m_serializer.Deserialize <SegmentHalfHourTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = segmentHalfHourModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = segmentHalfHourModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 9:
                NewSegmentTollModel newSegmentModel = m_serializer.Deserialize <NewSegmentTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = newSegmentModel.FreeMinutes;
                chargeModel.LeaveTimeout1 = newSegmentModel.LeaveTimeout;
                chargeModel.BeginTime1    = "00:00";
                chargeModel.EndTime1      = "00:00";
                break;

            case 10:
                SegmentQuarterHourTollModel segmentQuarterHourModel = m_serializer.Deserialize <SegmentQuarterHourTollModel>(model.TemplateJson);
                chargeModel.FreeMinutes1  = segmentQuarterHourModel.DayFreeMinutes;
                chargeModel.LeaveTimeout1 = segmentQuarterHourModel.LeaveTimeout;
                chargeModel.BeginTime1    = segmentQuarterHourModel.DayBeginTime.ToShortTimeString();
                chargeModel.EndTime1      = segmentQuarterHourModel.DayEndTime.ToShortTimeString();
                chargeModel.FreeMinutes2  = segmentQuarterHourModel.NightFreeMinutes;
                chargeModel.LeaveTimeout2 = segmentQuarterHourModel.LeaveTimeout;
                chargeModel.BeginTime2    = segmentQuarterHourModel.DayEndTime.ToShortTimeString();
                chargeModel.EndTime2      = segmentQuarterHourModel.DayBeginTime.ToShortTimeString();
                break;
            }
            return(chargeModel);
        }