/// <summary> /// 处理未完成交易记录 /// </summary> /// <param name="item"></param> /// <param name="w"></param> /// <param name="record"></param> private bool HandleUnFinishedPayment(YCTItem item, YCTWallet w, YCTPaymentRecord record, OpenCardEventArgs args) { string tac = item.Reader.RestorePaid(record.LCN, record.FCN, record.XRN, record.FEE, record.BAL); if (string.IsNullOrEmpty(tac)) { //处理失败 int err = item.Reader.LastError; if (err == 0xC2)//返回无对应的记录 { //无对应交易记录 删除记录 (new YCTPaymentRecordBll(AppSettings.CurrentSetting.MasterParkConnect)).Delete(record); return(true); } return(false); } //处理成功,生成保存上一次的收费记录 args.ChargeDateTime = record.TIM; if (this.OnPaying != null) { this.OnPaying(this, args); //产生上一次的收费事件 } if (args.Payment == null) { return(false); } args.UnFinishedPayment = args.Payment; //设置上次未完成的收费信息 args.Payment = null; //重置收费记录 args.ChargeDateTime = null; //重置计费时间 args.UnFinishedPayment.Paid = record.TF * 1.00M / 100.00M; //设置实收费用,羊城通记录里的交易金额是分为单位的,所以这里需要转换成元 args.UnFinishedPayment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer; args.UnFinishedPayment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.YangChengTong; //更新未完整交易记录 YCTPaymentRecord newVal = record.Clone(); if (record.WalletType == 0x02) { newVal.TAC = tac; //cpu钱包将TAC写到记录中 } newVal.State = YCTPaymentRecordState.PaidOk; //标记为完成 YCTPaymentRecordBll bll = new YCTPaymentRecordBll(AppSettings.CurrentSetting.MasterParkConnect); CommandResult result = bll.Update(newVal, record); return(result.Result == ResultCode.Successful); }
private bool Paid(YCTItem item, YCTWallet w, CardPaymentInfo paid, out int balance) { balance = 0; YCTPaymentInfo payment = item.Reader.Prepaid((int)(paid.GetPaying() * 100), w.WalletType, Setting.MaxOfflineMonth); if (payment == null) { return(false); } //这里应该保存记录,保存记录成功然后再进行下一步 YCTPaymentRecord record = CreateRecord(payment); record.WalletType = w.WalletType; record.EnterDateTime = paid.EnterDateTime.Value; record.State = YCTPaymentRecordState.PaidFail; YCTPaymentRecordBll bll = new YCTPaymentRecordBll(AppSettings.CurrentSetting.MasterParkConnect); CommandResult result = bll.Insert(record); if (result.Result != ResultCode.Successful) { return(false); } string tac = item.Reader.CompletePaid(); if (string.IsNullOrEmpty(tac)) { int err = item.Reader.LastError; //if (err == 0x01) bll.Delete(record); //失败 删除记录 return(false); } YCTPaymentRecord newVal = record.Clone(); if (w.WalletType == 0x02) { newVal.TAC = tac; //cpu钱包将TAC写到记录中 } newVal.State = YCTPaymentRecordState.PaidOk; //标记为完成 result = bll.Update(newVal, record); balance = record.BAL; //返回余额 if (w.WalletType == 2) { balance -= w.MinBalance; //CPU钱包可用余额为余额减去最小余额 } return(result.Result == ResultCode.Successful); }