using POSV.Card; using POSV.Entity; using POSV.ShoppingCart; using POSV.Utils; using POSV.Voice; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace POSV.Cef.FastTemplate.PayMent.Base { public abstract class PayBase { public PayBase() { logger = NLog.LogManager.GetLogger(this.GetType().FullName); } //================== 共有参数 ================= #region 属性 /// /// 支付对象 /// public OrderObject m_OrderObject; /// /// 支付条码 /// public string m_PayCode = ""; /// /// 全局异常信息 /// public string m_Message = ""; /// /// 返回的支付对象 /// public PayItem m_Paymodel; /// /// 支付参数 /// public PayMode m_CurrentPayMode = null; /// /// 异步通知 /// public PayResultAsyncCallBack AsyncPayResult; /// /// 日志 /// protected NLog.Logger logger = null; /// /// 支付通道 /// PayChannelEnum m_paytype = PayChannelEnum.原生支付; /// /// 剩余查询次数 /// protected int m_QueryQuantity = 4; public string SAOBEI_PAYTIME = ""; public string SAOBEI_QRCodeType = ""; public string SAOBEI_OrderId = ""; #endregion //================== 委托 ===================== /// /// 异步回掉 /// /// 支付订单 /// 支付对象 /// 支付code /// 异常信息 /// 查询剩余次数 public delegate void PayResultAsyncCallBack(OrderObject _orderObject, PayItem _paymodel, string _payCode, string _message, int _QueryQuantity); //================== 抽象方法 ===================== /// /// 验证支付参数 /// /// /// /// public abstract bool VerifyPay(string payCode, PayMode payMode); /// /// 同步支付 /// public abstract PayItem PayStart(); /// /// 异步通知 /// public abstract void AsyncPayStart(); /// /// 接口返回 /// protected abstract Tuple PayResult(); /// /// 查询支付 /// public abstract PayItem QueryPay(); protected abstract PayItem ToPayObject(object queryParam); //================== 内部方法 ===================== public virtual bool UpdateSaomaTicket(string orderNo, string serialNo, string payTime) { try { lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var transaction = db.GetTransaction()) { string sql = "update pos_saoma_pay_ticket set serialNo ='{0}' ,payTime='{1}' where orderNo = '{2}' and busType = 0 and storeId ='{3}'"; sql = string.Format(sql, serialNo, payTime, orderNo, Global.Instance.BusinessPlanLog.StoreId); db.Execute(sql, null); transaction.Complete(); return false; } } } } catch (Exception ex) { logger.Error(ex); } return true; } public void SaveSaomaTicket(string busNo, string authCode) { try { lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var transaction = db.GetTransaction()) { //先查询核销记录是否存在 string querySql = "select * from pos_saoma_pay_ticket where orderNo = '{0}' and busType = 0 and storeId ='{1}'"; querySql = string.Format(querySql, busNo, Global.Instance.BusinessPlanLog.StoreId); SaomaPayTicket saomaPayTicket = db.FirstOrDefault(querySql); //如果插入扫码支付记录 if (saomaPayTicket == null) { SaomaPayTicket entity = new SaomaPayTicket(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.TenantId = Global.Instance.BusinessPlanLog.TenantId; entity.StoreId = Global.Instance.BusinessPlanLog.StoreId; entity.WorkerId = Global.Instance.BusinessPlanLog.WorkerId; entity.ShiftNo = Global.Instance.BusinessPlanLog.No; entity.OrderNo = busNo; entity.AuthCode = authCode; entity.Money = this.m_OrderObject.ReceivableAmount - this.m_OrderObject.ReceivedAmount; entity.SerialNo = null; entity.PayTime = this.SAOBEI_PAYTIME; entity.BusType = 0; entity.PayStatus = 0; entity.PayChannel = (int)this.m_paytype; entity.PayTypeNo = this.m_CurrentPayMode.No; entity.PayTypeName = this.m_CurrentPayMode.Name; db.Save(entity); } transaction.Complete(); logger.Info("单号:[{0}]进行扫描支付,付款码{1}", busNo, authCode); } } } } catch (Exception ex) { logger.Error(ex); } } public void VoiceBroadcast() { if (Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_ISPAYVOICE)) Task.Factory.StartNew(() => { switch (m_Paymodel.No) { case "04"://支付宝 Voice.Pay.PayVoicePlay.PlayReceiveMoney(PayTypeEnum.Alipay, m_Paymodel.PaidAmount); break; case "05"://微信 Voice.Pay.PayVoicePlay.PlayReceiveMoney(PayTypeEnum.WeiXinPay, m_Paymodel.PaidAmount); break; } }); } } }