/// <summary> /// 保存卡片以及嵌套车场进出事件 /// </summary> /// <param name="card"></param> /// <param name="report"></param> /// <returns></returns> public CommandResult SaveCardAndNestedEvent(CardInfo card, CardEventReport report) { //内嵌车场事件只改变卡片的停车状态 IUnitWork unitWork = ProviderFactory.Create <IUnitWork>(_RepoUri); CardInfo info = card.Clone(); //卡片状态保持用数据库中的状态 info.ParkingStatus = report.ParkingStatus; if (!report.IsExitEvent) { info.LastNestParkDateTime = report.EventDateTime; //如果是入场事件,则更新卡片的最后进入内车场时间 } _Provider.Update(info, card, unitWork); ICardEventProvider icp = ProviderFactory.Create <ICardEventProvider>(_RepoUri); if (report.IsExitEvent) //如果是入内车场,则不记录最后刷卡时间,如果是出内车场,则保存上次时间 { report.LastDateTime = card.LastNestParkDateTime; } else { report.LastDateTime = null; } icp.Insert((new CardEventRecord(report)), unitWork); CommandResult ret = unitWork.Commit(); if (ret.Result == ResultCode.Successful) //如果成功,则改变卡片状态 { //卡片状态保持用数据库中的状态 card.ParkingStatus = report.ParkingStatus; } return(ret); }
/// <summary> /// 保存卡片与卡片事件信息(用于停车场产生事件时更新卡片状态并保存事件) /// </summary> /// <param name="card"></param> /// <param name="report"></param> /// <returns></returns> public CommandResult SaveCardAndEvent(CardInfo card, CardEventReport report) { IUnitWork unitWork = ProviderFactory.Create <IUnitWork>(_RepoUri); if (card.CardType == CardType.Ticket && report.IsExitEvent) ////纸票出场后将其删除 { _Provider.Delete(card, unitWork); } else { CardInfo info = card.Clone(); //卡片状态保持用数据库中的状态 info.ParkingStatus = report.ParkingStatus; info.LastDateTime = report.EventDateTime; info.LastEntrance = report.EntranceID; info.LastCarPlate = report.CarPlate; if (report.LimitationRemain != info.LimitationRemain) { info.LimitationRemain = report.LimitationRemain; info.LimitationTimestamp = report.EventDateTime; } //入口刷卡事件时,将缴费时间,停车费用,累计停车费用清空 if (!report.IsExitEvent) { info.ClearPaidData(); } _Provider.Update(info, card, unitWork); } ICardEventProvider icp = ProviderFactory.Create <ICardEventProvider>(_RepoUri); icp.Insert((new CardEventRecord(report)), unitWork); if (report.IsExitEvent && report.Limitation > 0) //出场事件且有限时停车的记录才要记录到上传表中。 { ECardRecord ecr = new ECardRecord() { SheetID = card.SheetID, Carplate = report.CarPlate, CardID = report.CardID, EventDt = report.EventDateTime, EnterDt = report.LastDateTime, Limitation = report.Limitation, LimitationRemain = report.LimitationRemain }; IECardRecordProvider iecr = ProviderFactory.Create <IECardRecordProvider>(_RepoUri); iecr.Insert(ecr, unitWork); } CommandResult ret = unitWork.Commit(); if (ret.Result == ResultCode.Successful) //如果成功,则改变卡片状态 { //卡片状态保持用数据库中的状态 card.ParkingStatus = report.ParkingStatus; card.LastDateTime = report.EventDateTime; card.LastEntrance = report.EntranceID; card.LastCarPlate = report.CarPlate; card.LimitationRemain = report.LimitationRemain; //入口刷卡事件时,将缴费时间,停车费用,累计停车费用清空 if (!report.IsExitEvent) { card.ClearPaidData(); } } return(ret); }
/// <summary> /// 获取车牌号码所在停车场 /// </summary> /// <param name="carPlate"></param> /// <returns></returns> public QueryResult <ParkInfo> GetParkInfoCarPlate(string carPlate) { QueryResult <ParkInfo> result = new QueryResult <ParkInfo>(ResultCode.Fail, null); //先根据车牌查找卡片 ICardProvider cardProvider = ProviderFactory.Create <ICardProvider>(this._repoUri); CardSearchCondition cardCondition = new CardSearchCondition(); cardCondition.CarPlateOrLast = carPlate; QueryResultList <CardInfo> cardResult = cardProvider.GetItems(cardCondition); if (cardResult.Result == ResultCode.Successful) { CardInfo card = null; if (cardResult.QueryObjects != null && cardResult.QueryObjects.Count > 0) { //查找第一个符合条件的已入场卡片 card = cardResult.QueryObjects.FirstOrDefault(c => c.IsInPark); } if (card == null) { result = new QueryResult <ParkInfo>(ResultCode.NoRecord, null); } else { //根据卡号和入场时间查找入场事件 ICardEventProvider eventProvider = ProviderFactory.Create <ICardEventProvider>(this._repoUri); CardEventSearchCondition eventCondition = new CardEventSearchCondition(); eventCondition.RecordDateTimeRange = new DateTimeRange(card.LastDateTime, card.LastDateTime); eventCondition.CardID = card.CardID; eventCondition.OnlyEnterEvent = true; QueryResultList <CardEventRecord> eventResult = eventProvider.GetItems(eventCondition); if (eventResult.Result == ResultCode.Successful) { CardEventRecord eventRecord = null; if (eventResult.QueryObjects != null && eventResult.QueryObjects.Count > 0) { //查找到多条记录时,取第一条记录 eventRecord = eventResult.QueryObjects[0]; } if (eventRecord == null) { result = new QueryResult <ParkInfo>(ResultCode.NoRecord, null); } else { ParkInfo park = provider.GetByID(eventRecord.ParkID).QueryObject; if (park == null) { result = new QueryResult <ParkInfo>(ResultCode.NoRecord, null); } else { result = new QueryResult <ParkInfo>(ResultCode.Successful, park); } } } } } return(result); }
/// <summary> /// 操作员结算 /// </summary> /// <param name="opt"></param> /// <returns></returns> public CommandResult Settle(OperatorSettleLog opt) { IUnitWork unitWork = ProviderFactory.Create <IUnitWork>(_RepoUri); IOperatorLogProvider ip = ProviderFactory.Create <IOperatorLogProvider>(_RepoUri); ip.Insert(opt, unitWork); if (opt.PaymentRecords != null && opt.PaymentRecords.Count > 0) { ICardPaymentRecordProvider provider = ProviderFactory.Create <ICardPaymentRecordProvider>(_RepoUri); foreach (CardPaymentInfo record in opt.PaymentRecords) { CardPaymentInfo original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.ReleaseRecords != null && opt.ReleaseRecords.Count > 0) { ICardReleaseRecordProvider provider = ProviderFactory.Create <ICardReleaseRecordProvider>(_RepoUri); foreach (CardReleaseRecord record in opt.ReleaseRecords) { CardReleaseRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.ChargeRecords != null && opt.ChargeRecords.Count > 0) { ICardChargeRecordProvider provider = ProviderFactory.Create <ICardChargeRecordProvider>(_RepoUri); foreach (CardChargeRecord record in opt.ChargeRecords) { CardChargeRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.DeferRecords != null && opt.DeferRecords.Count > 0) { ICardDeferRecordProvider provider = ProviderFactory.Create <ICardDeferRecordProvider>(_RepoUri); foreach (CardDeferRecord record in opt.DeferRecords) { CardDeferRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.CardLostRecords != null && opt.CardLostRecords.Count > 0) { ICardLostRestoreRecordProvider provider = ProviderFactory.Create <ICardLostRestoreRecordProvider>(_RepoUri); foreach (CardLostRestoreRecord record in opt.CardLostRecords) { CardLostRestoreRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.RecycleRecords != null && opt.RecycleRecords.Count > 0) { ICardRecycleRecordProvider provider = ProviderFactory.Create <ICardRecycleRecordProvider>(_RepoUri); foreach (CardRecycleRecord record in opt.RecycleRecords) { CardRecycleRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.EventRecords != null && opt.EventRecords.Count > 0) { ICardEventProvider provider = ProviderFactory.Create <ICardEventProvider>(_RepoUri); foreach (CardEventRecord record in opt.EventRecords) { CardEventRecord original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } if (opt.AlarmRecords != null && opt.AlarmRecords.Count > 0) { IAlarmProvider provider = ProviderFactory.Create <IAlarmProvider>(_RepoUri); foreach (AlarmInfo record in opt.AlarmRecords) { AlarmInfo original = record.Clone(); record.SettleDateTime = opt.SettleDateTime; provider.Update(record, original, unitWork); } } return(unitWork.Commit()); }
public void CreateProvider() { IAlarmProvider p1 = ProviderFactory.Create <IAlarmProvider>(connStr); Assert.IsTrue(p1 != null); ICardChargeRecordProvider p2 = ProviderFactory.Create <ICardChargeRecordProvider>(connStr); Assert.IsTrue(p2 != null); ICardDeferRecordProvider p3 = ProviderFactory.Create <ICardDeferRecordProvider>(connStr); Assert.IsTrue(p3 != null); ICardDisableEnableRecordProvider p4 = ProviderFactory.Create <ICardDisableEnableRecordProvider>(connStr); Assert.IsTrue(p4 != null); ICardEventProvider p5 = ProviderFactory.Create <ICardEventProvider>(connStr); Assert.IsTrue(p5 != null); ICardLostRestoreRecordProvider p6 = ProviderFactory.Create <ICardLostRestoreRecordProvider>(connStr); Assert.IsTrue(p6 != null); ICardProvider p9 = ProviderFactory.Create <ICardProvider>(connStr); Assert.IsTrue(p9 != null); ICardRecycleRecordProvider p10 = ProviderFactory.Create <ICardRecycleRecordProvider>(connStr); Assert.IsTrue(p10 != null); ICardReleaseRecordProvider p11 = ProviderFactory.Create <ICardReleaseRecordProvider>(connStr); Assert.IsTrue(p11 != null); IEntranceProvider p12 = ProviderFactory.Create <IEntranceProvider>(connStr); Assert.IsTrue(p12 != null); IOperatorLogProvider p13 = ProviderFactory.Create <IOperatorLogProvider>(connStr); Assert.IsTrue(p13 != null); IOperatorProvider p14 = ProviderFactory.Create <IOperatorProvider>(connStr); Assert.IsTrue(p14 != null); IParkProvider p16 = ProviderFactory.Create <IParkProvider>(connStr); Assert.IsTrue(p16 != null); IRoleProvider p17 = ProviderFactory.Create <IRoleProvider>(connStr); Assert.IsTrue(p17 != null); ISnapShotProvider p18 = ProviderFactory.Create <ISnapShotProvider>(connStr); Assert.IsTrue(p18 != null); ISysParameterProvider p19 = ProviderFactory.Create <ISysParameterProvider>(connStr); Assert.IsTrue(p19 != null); IVideoSourceProvider p21 = ProviderFactory.Create <IVideoSourceProvider>(connStr); Assert.IsTrue(p21 != null); IWaitingCommandProvider p24 = ProviderFactory.Create <IWaitingCommandProvider>(connStr); Assert.IsTrue(p24 != null); IWorkstationProvider p25 = ProviderFactory.Create <IWorkstationProvider>(connStr); Assert.IsTrue(p25 != null); }