/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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()); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 获取出场超时时长 /// </summary> /// <returns></returns> public int GetLeaveTimeOut(BillingTemplateModel _model) { try { model = m_serializer.Deserialize <SegmentNoneHalfHourTollModel>(_model.TemplateJson); return(model.LeaveTimeout); } catch { return(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); }
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); }); }); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }