322 lines
19 KiB
C#
322 lines
19 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 移动支付相关方法
|
||
/// </summary>
|
||
public class MobilePayHelper
|
||
{
|
||
#region 方法 -> 差异流水(按结账单的口径产生的移动支付差异流水)
|
||
/// <summary>
|
||
/// 差异流水(按结账单的口径产生的移动支付差异流水)
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="ProvinceCode">省份编码</param>
|
||
/// <param name="ServerPart_Code">服务区编码</param>
|
||
/// <param name="ServerPartShop_Code">门店编码</param>
|
||
/// <param name="MachineCode">机器编码</param>
|
||
/// <param name="beginDate">开始时间</param>
|
||
/// <param name="endDate">结束时间</param>
|
||
/// <returns></returns>
|
||
public static List<Models.MobilePayModel> GetMobilePayContrast(Transaction _Transaction, string ProvinceCode,
|
||
string ServerPart_Code, string ServerPartShop_Code, string MachineCode, string beginDate, string endDate)
|
||
{
|
||
List<Models.MobilePayModel> mobilePayList = new List<Models.MobilePayModel>();
|
||
|
||
#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<List<Models.MobilePayModel>>(
|
||
_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<Models.MobilePayModel> listMobilePay = new List<Models.MobilePayModel>();
|
||
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 方法 -> 银行到账(按自然日的口径统计移动支付交易金额)
|
||
/// <summary>
|
||
/// 银行到账(按自然日的口径统计移动支付交易金额)
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="membershipId">商家会员内码</param>
|
||
/// <param name="beginDate">开始时间</param>
|
||
/// <param name="endDate">结束时间</param>
|
||
/// <returns></returns>
|
||
public static List<Models.BankAccountModel> GetRevenueByDay(Transaction _Transaction, int membershipId, string beginDate, string endDate)
|
||
{
|
||
List<Models.BankAccountModel> BankAccountList = new List<Models.BankAccountModel>();
|
||
|
||
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<DateTime>("ORDER_DATE").ToShortDateString(),
|
||
}
|
||
into p
|
||
select new
|
||
{
|
||
Order_Date = p.Key.t1,
|
||
Sum_TaxfeeAmount = p.Sum(n => n.Field<decimal>("TAXFEE_AMOUNT")),
|
||
Sum_Amount = p.Sum(n => n.Field<decimal>("TICKET_AMOUNT")),//交易金额
|
||
Sum_TicketAmount = p.Sum(n => n.Field<decimal>("TICKET_AMOUNT")) -
|
||
p.Sum(n => n.Field<decimal>("TAXFEE_AMOUNT")),//到账金额
|
||
BankList = from t in dtRevenue.AsEnumerable().Where(
|
||
o => o.Field<DateTime>("ORDER_DATE").ToShortDateString() == p.Key.t1)
|
||
group t by new
|
||
{
|
||
t1 = t.Field<string>("BANK_NAME"),
|
||
t2 = t.Field<string>("BANK_LOG"),
|
||
t3 = t.Field<string>("BANK_ACCOUNT"),
|
||
t4 = t.Field<string>("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<decimal>("TAXFEE_AMOUNT")),
|
||
Sum_Amount = s.Sum(n => n.Field<decimal>("TICKET_AMOUNT")),//交易金额
|
||
Sum_TicketAmount = (s.Sum(n => n.Field<decimal>("TICKET_AMOUNT")) -
|
||
s.Sum(n => n.Field<decimal>("TAXFEE_AMOUNT"))),//到账金额
|
||
ServerPartList = from t in dtRevenue.AsEnumerable().Where(o =>
|
||
o.Field<DateTime>("ORDER_DATE").ToShortDateString() == p.Key.t1 &&
|
||
o.Field<string>("BANK_ACCOUNT") == s.Key.t3)
|
||
group t by new
|
||
{
|
||
t1 = t.Field<string>("SERVERPART_NAME"),
|
||
}
|
||
into h
|
||
select new
|
||
{
|
||
Serverpart_Name = h.Key.t1,
|
||
Sum_TaxfeeAmount = h.Sum(n => n.Field<decimal>("TAXFEE_AMOUNT")),
|
||
Sum_Amount = h.Sum(n => n.Field<decimal>("TICKET_AMOUNT")),//交易金额
|
||
Sum_TicketAmount = (h.Sum(n => n.Field<decimal>("TICKET_AMOUNT")) -
|
||
h.Sum(n => n.Field<decimal>("TAXFEE_AMOUNT"))),//到账金额
|
||
Revenue_List = dtRevenue.AsEnumerable().Select(o => new
|
||
{
|
||
Order_Date = Convert.ToDateTime(o.Field<DateTime>("ORDER_DATE")).ToShortDateString(),
|
||
ServerPart_Name = o.Field<string>("SERVERPART_NAME"),
|
||
ServerPartShop_Name = o.Field<string>("SERVERPARTSHOP_NAME"),
|
||
MachineCode = o.Field<string>("MACHINECODE"),
|
||
TaxfeeAmount = o.Field<decimal>("TAXFEE_AMOUNT"),
|
||
Amount = o.Field<decimal>("TAXFEE_AMOUNT"),
|
||
TicketAmount = o.Field<decimal>("TICKET_AMOUNT") -
|
||
o.Field<decimal>("TAXFEE_AMOUNT"),
|
||
BANK_ACCOUNT = o.Field<string>("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<Models.BankAccountModel>(resultstr);
|
||
}
|
||
}
|
||
|
||
return BankAccountList;
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 获取实时移动支付流水
|
||
/// <summary>
|
||
/// 获取实时移动支付流水
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="membershipId">商家会员内码</param>
|
||
/// <param name="serverpartShopCode">门店编码集合</param>
|
||
/// <param name="beginDate">统计开始时间,格式如2021-10-01 00:00:00</param>
|
||
/// <param name="endDate">统计结束时间,格式如2021-10-01 23:59:59</param>
|
||
/// <param name="showCount">显示行数</param>
|
||
/// <param name="orderno">订单编号</param>
|
||
/// <returns></returns>
|
||
public static List<ESCom.Model.MobilePayData> GetCurTrade(Transaction _Transaction, string membershipId,
|
||
string serverpartShopCode, string beginDate, string endDate, int showCount, string orderno = "")
|
||
{
|
||
List<ESCom.Model.MobilePayData> MobilePayDataList = new List<ESCom.Model.MobilePayData>();
|
||
|
||
//获取商户门店权限集合
|
||
string provinceCode = "", serverpartShopCodes = "";
|
||
if (!string.IsNullOrWhiteSpace(serverpartShopCode))
|
||
{
|
||
//若传入服务区门店编码,则直接按传入的参数获取
|
||
serverpartShopCodes = serverpartShopCode;
|
||
}
|
||
else
|
||
{
|
||
//若未传入服务区门店编码,则根据商户权限获取服务区门店编码集合
|
||
ESCom.BusinessMan.GetUserServerPartShop(membershipId.TryParseToInt(),
|
||
_Transaction, ref provinceCode, ref serverpartShopCodes);
|
||
}
|
||
//根据门店权限获取移动支付商户号信息
|
||
List<ESCom.Model.BusinessShopCode> 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<ESCom.Model.MobilePayData> _ilist = ESCom.Revenue.GetKWYTotalList(_Transaction,
|
||
starTime, endTime, _s_busi_id, "", BusinessShopCodeList, showCount.ToString(), orderno);
|
||
MobilePayDataList = MobilePayDataList.Concat(_ilist).ToList();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
List<ESCom.Model.MobilePayData> _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
|
||
}
|
||
} |