You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
7.4 KiB
C#
216 lines
7.4 KiB
C#
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 属性
|
|
/// <summary>
|
|
/// 支付对象
|
|
/// </summary>
|
|
public OrderObject m_OrderObject;
|
|
|
|
/// <summary>
|
|
/// 支付条码
|
|
/// </summary>
|
|
public string m_PayCode = "";
|
|
|
|
/// <summary>
|
|
/// 全局异常信息
|
|
/// </summary>
|
|
public string m_Message = "";
|
|
|
|
/// <summary>
|
|
/// 返回的支付对象
|
|
/// </summary>
|
|
public PayItem m_Paymodel;
|
|
|
|
/// <summary>
|
|
/// 支付参数
|
|
/// </summary>
|
|
public PayMode m_CurrentPayMode = null;
|
|
|
|
/// <summary>
|
|
/// 异步通知
|
|
/// </summary>
|
|
public PayResultAsyncCallBack AsyncPayResult;
|
|
|
|
/// <summary>
|
|
/// 日志
|
|
/// </summary>
|
|
protected NLog.Logger logger = null;
|
|
|
|
/// <summary>
|
|
/// 支付通道
|
|
/// </summary>
|
|
PayChannelEnum m_paytype = PayChannelEnum.原生支付;
|
|
|
|
/// <summary>
|
|
/// 剩余查询次数
|
|
/// </summary>
|
|
protected int m_QueryQuantity = 4;
|
|
public string SAOBEI_PAYTIME = "";
|
|
public string SAOBEI_QRCodeType = "";
|
|
public string SAOBEI_OrderId = "";
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//================== 委托 =====================
|
|
/// <summary>
|
|
/// 异步回掉
|
|
/// </summary>
|
|
/// <param name="_orderObject">支付订单</param>
|
|
/// <param name="_paymodel">支付对象</param>
|
|
/// <param name="_payCode">支付code</param>
|
|
/// <param name="message">异常信息</param>
|
|
/// <param name="_QueryQuantity">查询剩余次数</param>
|
|
public delegate void PayResultAsyncCallBack(OrderObject _orderObject, PayItem _paymodel, string _payCode, string _message, int _QueryQuantity);
|
|
|
|
|
|
//================== 抽象方法 =====================
|
|
|
|
/// <summary>
|
|
/// 验证支付参数
|
|
/// </summary>
|
|
/// <param name="payCode"></param>
|
|
/// <param name="payMode"></param>
|
|
/// <returns></returns>
|
|
public abstract bool VerifyPay(string payCode, PayMode payMode);
|
|
|
|
/// <summary>
|
|
/// 同步支付
|
|
/// </summary>
|
|
public abstract PayItem PayStart();
|
|
|
|
/// <summary>
|
|
/// 异步通知
|
|
/// </summary>
|
|
public abstract void AsyncPayStart();
|
|
|
|
/// <summary>
|
|
/// 接口返回
|
|
/// </summary>
|
|
protected abstract Tuple<bool, string, decimal> PayResult();
|
|
|
|
/// <summary>
|
|
/// 查询支付
|
|
/// </summary>
|
|
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<SaomaPayTicket>(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<SaomaPayTicket>(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;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|