using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using SuperMap.RealEstate.ServiceModel;
using COMB = SuperMap.RealEstate.Coop.Merchant.Business;
using ESCom = EShang.Common;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using HZQR.Common;
namespace YFBusinessApi.Helper
{
///
/// 移动支付相关方法
///
public class MobilePayHelper
{
#region 方法 -> 差异流水(按结账单的口径产生的移动支付差异流水)
///
/// 差异流水(按结账单的口径产生的移动支付差异流水)
///
/// 事务管理器
/// 省份编码
/// 服务区编码
/// 门店编码
/// 机器编码
/// 开始时间
/// 结束时间
///
public static List GetMobilePayContrast(Transaction _Transaction, string ProvinceCode,
string ServerPart_Code, string ServerPartShop_Code, string MachineCode, string beginDate, string endDate)
{
List mobilePayList = new List();
#region 通过接口获取收银机端流水
string _BaseUrl = ESCom.Config.AppSettings.GetWebApiUrls(ProvinceCode);
string PostStr = string.Format("Start_Date={0}&End_Date={1}&ServerPart_Code={2}&ServerPartShop_Code={3}&MachineCode={4}",
beginDate, endDate, ServerPart_Code, ServerPartShop_Code, MachineCode);
string RequestUrl = _BaseUrl + "?action_type=GetMobilePay&" + PostStr;
string format = "application/json;charset=UTF-8";
string val = ESCom.HttpUtil.HttpUrlPost(PostStr, RequestUrl, format, 0);
JObject _JObject = JObject.Parse(val);
if (_JObject["Result_Data"] != null && _JObject["Result_Data"]["List"] != null)
{
mobilePayList = Newtonsoft.Json.JsonConvert.DeserializeObject>(
_JObject["Result_Data"]["List"].ToString());
}
#endregion
#region 获取通道传输的流水
string sql = string.Format(@"
SELECT
A.TICKET_CODE,A.TICKET_AMOUNT,A.ORDER_DATE,
A.SERVERPART_CODE,A.SERVERPARTSHOP_CODE,A.MACHINECODE
FROM HIGHWAY_SELLDATA.T_MOBILEPAYMENT_RECORDS A
WHERE A.ORDER_DATE >= TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') AND
A.ORDER_DATE <= TO_DATE('{1}','YYYY-MM-DD HH24:MI:SS') AND
A.SERVERPART_CODE='{2}' AND A.SERVERPARTSHOP_CODE='{3}' AND
A.MACHINECODE=LPAD('{4}',4,'0')", beginDate, endDate, ServerPart_Code, ServerPartShop_Code, MachineCode);
DataTable dtMobilePay = new COMB.BRAND(_Transaction).ExecuteDataTable(sql);
#endregion
List listMobilePay = new List();
foreach (Models.MobilePayModel result in mobilePayList)
{
DataRow[] drs = dtMobilePay.Select("TICKET_CODE='" + result.Ticket_Code + "'");
//收银端失败,通道有流水,则标识收银机端有误
if (result.Mobilepay_Result == 0 && drs.Length > 0)
{
result.Mobilepay_Result_Text = GetResultText(result.Mobilepay_Result);//收银机端失败
result.Factual_Mobilepay_Result = 9;//通道支付成功
result.Factual_Mobilepay_Result_Text = GetResultText(9);//通道支付成功
listMobilePay.Add(result);
}
else if (result.Mobilepay_Result != 0 && drs.Length == 0)
{
result.Mobilepay_Result = result.Mobilepay_Result == 5 ? 9 : result.Mobilepay_Result;
result.Mobilepay_Result_Text = GetResultText(result.Mobilepay_Result);
result.Factual_Mobilepay_Result_Text = GetResultText(result.Factual_Mobilepay_Result);
listMobilePay.Add(result);
}
}
return mobilePayList;
}
public static string GetResultText(int Mobilepay_Result)
{
string Mobilepay_Result_Text = "";
switch (Mobilepay_Result)
{
case 0:
Mobilepay_Result_Text = "支付失败";
break;
case 1:
Mobilepay_Result_Text = "人工确认";
break;
case 5:
case 9:
Mobilepay_Result_Text = "支付成功";
break;
default:
break;
}
return Mobilepay_Result_Text;
}
#endregion
#region 方法 -> 银行到账(按自然日的口径统计移动支付交易金额)
///
/// 银行到账(按自然日的口径统计移动支付交易金额)
///
/// 事务管理器
/// 商家会员内码
/// 开始时间
/// 结束时间
///
public static List GetRevenueByDay(Transaction _Transaction, int membershipId, string beginDate, string endDate)
{
List BankAccountList = new List();
string provinceCode = "", serverPartShopCode = "";
ESCom.BusinessMan.GetUserServerPartShop(membershipId, _Transaction, ref provinceCode, ref serverPartShopCode);
if (!string.IsNullOrEmpty(serverPartShopCode))
{
string sql = string.Format(@"
SELECT
A.SERVERPART_NAME,A.SERVERPARTSHOP_NAME,A.MACHINECODE,A.ORDER_DATE,A.TICKET_AMOUNT,A.TAXFEE_AMOUNT,
B.BANK_NAME,B.BANK_LOG,B.BANK_ACCOUNT,B.RECKONER_NAME
FROM
HIGHWAY_SELLDATA.T_REVENUE_NATURALDAY A
LEFT JOIN (
SELECT
B.PROVINCE_CODE,B.SERVERPART_ID,B.SERVERPARTSHOP_ID,B.BANK_NAME,C.BANK_LOG,B.BANK_ACCOUNT,
B.RECKONER_NAME
FROM
COOP_MERCHANT.T_BUSINESSSHOPCODE B,
COOP_MERCHANT.T_BANK C
WHERE
B.BUSINESSSHOPCODE_STATE = 1 AND B.BANK_NAME = C.BANK_NAME
GROUP BY B.PROVINCE_CODE,B.SERVERPART_ID,B.SERVERPARTSHOP_ID,B.BANK_NAME,C.BANK_LOG,B.BANK_ACCOUNT,
B.RECKONER_NAME) B
ON A.PROVINCE_CODE = B.PROVINCE_CODE AND A.SERVERPART_ID = B.SERVERPART_ID
AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID
WHERE
A.SERVERPART_CODE || A.SERVERPARTSHOP_CODE IN ('{0}') AND
ORDER_DATE >= TO_DATE('{1}','YYYY/MM/DD') AND ORDER_DATE < TO_DATE('{2}','YYYY/MM/DD') + 1",
serverPartShopCode.Replace(",", "','"), beginDate, endDate);
DataTable dtRevenue = new COMB.BRAND(_Transaction).ExecuteDataTable(sql);
dtRevenue.DefaultView.Sort = "ORDER_DATE desc";
dtRevenue = dtRevenue.DefaultView.ToTable();
if (dtRevenue.Rows.Count > 0)
{
var list = from t in dtRevenue.AsEnumerable()
group t by new
{
t1 = t.Field("ORDER_DATE").ToShortDateString(),
}
into p
select new
{
Order_Date = p.Key.t1,
Sum_TaxfeeAmount = p.Sum(n => n.Field("TAXFEE_AMOUNT")),
Sum_Amount = p.Sum(n => n.Field("TICKET_AMOUNT")),//交易金额
Sum_TicketAmount = p.Sum(n => n.Field("TICKET_AMOUNT")) -
p.Sum(n => n.Field("TAXFEE_AMOUNT")),//到账金额
BankList = from t in dtRevenue.AsEnumerable().Where(
o => o.Field("ORDER_DATE").ToShortDateString() == p.Key.t1)
group t by new
{
t1 = t.Field("BANK_NAME"),
t2 = t.Field("BANK_LOG"),
t3 = t.Field("BANK_ACCOUNT"),
t4 = t.Field("RECKONER_NAME")
}
into s
select new
{
Bank_Name = s.Key.t1.TryParseToString(),
Bank_Log = !string.IsNullOrEmpty(s.Key.t2) ? ESCom.Config.AppSettings.CoopMerchantUrls + s.Key.t2 : "",
Bank_Account = s.Key.t3.TryParseToString(),
Reckoner_Name = s.Key.t4.TryParseToString(),
Sum_TaxfeeAmount = s.Sum(n => n.Field("TAXFEE_AMOUNT")),
Sum_Amount = s.Sum(n => n.Field("TICKET_AMOUNT")),//交易金额
Sum_TicketAmount = (s.Sum(n => n.Field("TICKET_AMOUNT")) -
s.Sum(n => n.Field("TAXFEE_AMOUNT"))),//到账金额
ServerPartList = from t in dtRevenue.AsEnumerable().Where(o =>
o.Field("ORDER_DATE").ToShortDateString() == p.Key.t1 &&
o.Field("BANK_ACCOUNT") == s.Key.t3)
group t by new
{
t1 = t.Field("SERVERPART_NAME"),
}
into h
select new
{
Serverpart_Name = h.Key.t1,
Sum_TaxfeeAmount = h.Sum(n => n.Field("TAXFEE_AMOUNT")),
Sum_Amount = h.Sum(n => n.Field("TICKET_AMOUNT")),//交易金额
Sum_TicketAmount = (h.Sum(n => n.Field("TICKET_AMOUNT")) -
h.Sum(n => n.Field("TAXFEE_AMOUNT"))),//到账金额
Revenue_List = dtRevenue.AsEnumerable().Select(o => new
{
Order_Date = Convert.ToDateTime(o.Field("ORDER_DATE")).ToShortDateString(),
ServerPart_Name = o.Field("SERVERPART_NAME"),
ServerPartShop_Name = o.Field("SERVERPARTSHOP_NAME"),
MachineCode = o.Field("MACHINECODE"),
TaxfeeAmount = o.Field("TAXFEE_AMOUNT"),
Amount = o.Field("TAXFEE_AMOUNT"),
TicketAmount = o.Field("TICKET_AMOUNT") -
o.Field("TAXFEE_AMOUNT"),
BANK_ACCOUNT = o.Field("BANK_ACCOUNT")
}).Where(l =>
l.ServerPart_Name == h.Key.t1 &&
l.Order_Date == p.Key.t1 && l.BANK_ACCOUNT == s.Key.t3)
}
}
};
string resultstr = JsonConvert.SerializeObject(list.ToList());
BankAccountList = QRWL.Common.JsonHelper.JSONStringToList(resultstr);
}
}
return BankAccountList;
}
#endregion
#region 方法 -> 获取实时移动支付流水
///
/// 获取实时移动支付流水
///
/// 事务管理器
/// 商家会员内码
/// 门店编码集合
/// 统计开始时间,格式如2021-10-01 00:00:00
/// 统计结束时间,格式如2021-10-01 23:59:59
/// 显示行数
/// 订单编号
///
public static List GetCurTrade(Transaction _Transaction, string membershipId,
string serverpartShopCode, string beginDate, string endDate, int showCount, string orderno = "")
{
List MobilePayDataList = new List();
//获取商户门店权限集合
string provinceCode = "", serverpartShopCodes = "";
if (!string.IsNullOrWhiteSpace(serverpartShopCode))
{
//若传入服务区门店编码,则直接按传入的参数获取
serverpartShopCodes = serverpartShopCode;
}
else
{
//若未传入服务区门店编码,则根据商户权限获取服务区门店编码集合
ESCom.BusinessMan.GetUserServerPartShop(membershipId.TryParseToInt(),
_Transaction, ref provinceCode, ref serverpartShopCodes);
}
//根据门店权限获取移动支付商户号信息
List BusinessShopCodeList = ESCom.BusinessMan.GetMerchantCodeList(_Transaction, serverpartShopCodes);
//查询实时移动支付交易流水
if (BusinessShopCodeList.Count > 0)
{
//将统计时间转换成yyyy-MM-dd HH:mm:ss格式
string starTime = Convert.ToDateTime(beginDate).ToString("yyyy-MM-dd HH:mm:ss");
string endTime = Convert.ToDateTime(endDate).ToString("yyyy-MM-dd HH:mm:ss");
//根据支付渠道和商户号查询移动支付流水
var BusinessCodeList = from x in BusinessShopCodeList
group x by new
{
//移动支付商户号
t1 = x.Business_Code,
//移动支付渠道
t2 = x.Transaction_Trench
} into m
select new
{
//移动支付商户号
Business_Code = m.Key.t1,
//移动支付渠道
Transaction_Trench = m.Key.t2
};
foreach (var item in BusinessCodeList.ToList())
{
switch (item.Transaction_Trench)
{
//客无忧
case 1005:
#region 请求客无忧数据
if (item.Business_Code.Replace(",", ",").Contains(","))
{
//如果当前配置的商户号是多个,则逐个进行查询
foreach (string _s_busi_id in item.Business_Code.Replace(",", ",").Split(','))
{
List _ilist = ESCom.Revenue.GetKWYTotalList(_Transaction,
starTime, endTime, _s_busi_id, "", BusinessShopCodeList, showCount.ToString(), orderno);
MobilePayDataList = MobilePayDataList.Concat(_ilist).ToList();
}
}
else
{
List _ilist = ESCom.Revenue.GetKWYTotalList(_Transaction, starTime,
endTime, item.Business_Code.Trim(), "", BusinessShopCodeList, showCount.ToString(), orderno);
MobilePayDataList = MobilePayDataList.Concat(_ilist).ToList();
}
#endregion
break;
}
}
MobilePayDataList.OrderByDescending(o => o.begin_time);
MobilePayDataList = MobilePayDataList.GetRange(0, showCount);
}
return MobilePayDataList;
}
#endregion
}
}