Commit a5ce2103 by 陶然

更新扫码支付

parent 7c4771f4
...@@ -16,7 +16,8 @@ namespace Com.Bocom.OpenApi ...@@ -16,7 +16,8 @@ namespace Com.Bocom.OpenApi
/// 测试环境 /// 测试环境
/// </summary> /// </summary>
//internal static string APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443/uat";//"https://117.184.192.242:9443"; //internal static string APIGW_URL_ADDRESS = "https://open.test.bankcomm.com:9443/uat";//"https://117.184.192.242:9443";
internal static string basicUrlQrCode = "https://117.184.192.242:9443";//"https://open.test.bankcomm.com:9443"; internal static string basicUrlQrCode = "https://open.test.bankcomm.com:9443";
//internal static string basicUrlQrCode = "https://117.184.192.242:9443";//"https://open.test.bankcomm.com:9443";
//internal static string basicUrlQrCode = "https://open.test.bankcomm.com:9443"; //internal static string basicUrlQrCode = "https://open.test.bankcomm.com:9443";
/// <summary> /// <summary>
......
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAihC4Qj8mlFxlO54qhUOmwWTKqhTCrfzZIeWFqS+QH9BxiChja6Za8oYVhyP+kiRiWxffBTzT25DPUfaDiQVCnlhdqlfOHHZ2Gp291pKrmF/E4WxLk50zYE1d69osw20GY0EVxhpml5bOxumxughpKwPKCrcYtN7MXAeWUEpl7AzqPNUgV+KlmE7TxB9tWcP6jeSn4/PQ47BfYmi2LI25UXfaFrUSNITkePoIYVZnP6FVpsC2grTdnPeUgfaCB3f/fPjEwRPrCHXCMopEWQQGIvqZuaZkFaQAd5XYfQnRytnF8nPofuRCDOHZYV2ldb5fVfsne/PuWmKBnBghebcw+QIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAihC4Qj8mlFxlO54qhUOmwWTKqhTCrfzZIeWFqS+QH9BxiChja6Za8oYVhyP+kiRiWxffBTzT25DPUfaDiQVCnlhdqlfOHHZ2Gp291pKrmF/E4WxLk50zYE1d69osw20GY0EVxhpml5bOxumxughpKwPKCrcYtN7MXAeWUEpl7AzqPNUgV+KlmE7TxB9tWcP6jeSn4/PQ47BfYmi2LI25UXfaFrUSNITkePoIYVZnP6FVpsC2grTdnPeUgfaCB3f/fPjEwRPrCHXCMopEWQQGIvqZuaZkFaQAd5XYfQnRytnF8nPofuRCDOHZYV2ldb5fVfsne/PuWmKBnBghebcw+QIDAQAB
\ No newline at end of file
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4gZgdtCHtPNxMFYFLC1/8CnGKuMxph+E9gnC0VQczh0rdp8zNoBEKD0c6J77fhyIfUetzRmjQbE3kAs4L6Us1bhHzRaAKAP5hdAyMcb6XqET6WLxN/kA3jvPqteG2yXLnGtY+SxUGNmptluAC2AdvRECg4ui1sLNC/MWpsLzXDu5yIBMqnbHOig4cJOdCgVk+vEFi92niVAAdOfsbqMhT/nmWkFfFH2EbSxsN5+ihZ39VQJ1CTG2HBMUEvbjr0aHgn1rcMNyRAx2jM+XhoyZe/BIyTV2zI0xH0sc1d3jfmYn733/gmjZ01ikiG0eqBZJMEIJYBk/7M6h9dv+Ao61cQIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4gZgdtCHtPNxMFYFLC1/8CnGKuMxph+E9gnC0VQczh0rdp8zNoBEKD0c6J77fhyIfUetzRmjQbE3kAs4L6Us1bhHzRaAKAP5hdAyMcb6XqET6WLxN/kA3jvPqteG2yXLnGtY+SxUGNmptluAC2AdvRECg4ui1sLNC/MWpsLzXDu5yIBMqnbHOig4cJOdCgVk+vEFi92niVAAdOfsbqMhT/nmWkFfFH2EbSxsN5+ihZ39VQJ1CTG2HBMUEvbjr0aHgn1rcMNyRAx2jM+XhoyZe/BIyTV2zI0xH0sc1d3jfmYn733/gmjZ01ikiG0eqBZJMEIJYBk/7M6h9dv+Ao61cQIDAQAB
\ No newline at end of file
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
\ No newline at end of file
...@@ -15,6 +15,7 @@ using static Com.Bocom.OpenApi.AddContractOrderRequestV2.AddContractOrderRequest ...@@ -15,6 +15,7 @@ using static Com.Bocom.OpenApi.AddContractOrderRequestV2.AddContractOrderRequest
using static System.Net.Mime.MediaTypeNames; using static System.Net.Mime.MediaTypeNames;
using System.Reflection; using System.Reflection;
using System.Web.Caching; using System.Web.Caching;
using Njzj.Bocoms.Openapis.Entities;
namespace Com.Bocom.OpenApi namespace Com.Bocom.OpenApi
{ {
...@@ -242,7 +243,7 @@ namespace Com.Bocom.OpenApi ...@@ -242,7 +243,7 @@ namespace Com.Bocom.OpenApi
//-----------------------记录下这份收款码的数据的信息,如果这份订单取消了就要作废-------------------------------- //-----------------------记录下这份收款码的数据的信息,如果这份订单取消了就要作废--------------------------------
var rtns = response as MPNG210001ResponseV1; var rtns = response as MPNG210001ResponseV1;
if (rtns.rsp_head.response_status != "S") throw new Exception(rtns.rsp_head.response_msg); if (rtns.rsp_head.response_status != "S") throw new Exception(rtns.rsp_head.response_msg);
//rtns.rsp_body.display_code_text = $"http://yunbanktest.bankcomm.com/tcipp/pmss/cipp.jsp?qrCode={rtns.rsp_body.display_code_text}"; rtns.rsp_body.display_code_text = $"http://yunbanktest.bankcomm.com/tcipp/pmss/cipp.jsp?qrCode={rtns.rsp_body.display_code_text}";
return rtns; return rtns;
} }
else else
...@@ -291,5 +292,45 @@ namespace Com.Bocom.OpenApi ...@@ -291,5 +292,45 @@ namespace Com.Bocom.OpenApi
throw new Exception($"ReturnCode:{response.GetRspCode()}{Environment.NewLine}ReturnMsg:{response.GetRspMsg()}"); throw new Exception($"ReturnCode:{response.GetRspCode()}{Environment.NewLine}ReturnMsg:{response.GetRspMsg()}");
} }
} }
/// <summary>
/// 删除收款码订单信息
/// </summary>
/// <param name="receiveCode"></param>
/// <param name="conn"></param>
/// <returns></returns>
public static bool ReceiveCodeDelete(this ReceiveCode receiveCode, IDbConnection conn = null)
{
bool useTransaction = conn == null;//是否启用事务,如果外部未传入conn,启用内部事务
if (conn == null)
{
conn = KiviiContext.GetOpenedDbConnection<ReceiveCode>();
}
var details = conn.Select<ReceiveCodeDetail>(o => o.ReceiveCodeKvid == receiveCode.Kvid);
IDbTransaction trans = null;//事务,如果外部来了Connection,不生成事务
if (useTransaction) trans = conn.OpenTransaction();
try
{
if (!details.IsNullOrEmpty())
{
foreach (var item in details)
{
conn.DeleteById<ReceiveCodeDetail>(item.Kvid);
}
}
conn.DeleteById<ReceiveCode>(receiveCode.Kvid);
trans?.Commit();
return true;
}
catch (Exception ex)
{
trans?.Rollback();
throw ex;
}
}
} }
} }
...@@ -129,6 +129,14 @@ ...@@ -129,6 +129,14 @@
<Compile Include="WriteOffJob.cs" /> <Compile Include="WriteOffJob.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Content\2023_08_21_南京质检智慧记帐系统公钥\南京质检智慧记帐系统公钥%28交行提供的_使用此公钥%29.pub" />
<None Include="Content\2023_08_21_南京质检智慧记帐系统公钥\南京质检智慧记帐系统公钥.pub" />
<None Include="Content\2023_08_21_南京质检智慧记帐系统公钥\南京质检智慧记帐系统私钥.pri" />
<None Include="Content\bocom-api-sdk_v1_条码_0926.zip" />
<None Include="Content\bocom-api-sdk_新通知示例demo.zip" />
<None Include="Content\Fw_ Fw_ 转发_ 智慧记账开放银行新版sdk(9月15日投产版本).zip" />
<None Include="Content\product_smtbknotify_api_0580_智慧记账通知 %28变更后%29.zip" />
<None Include="Content\智慧记账 对外接口sdk_v2.zip" />
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -33,5 +33,5 @@ using System.Runtime.InteropServices; ...@@ -33,5 +33,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示: //通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.4.2023.8290")] [assembly: AssemblyVersion("5.4.2023.10190")]
[assembly: AssemblyFileVersion("5.4.2023.8290")] [assembly: AssemblyFileVersion("5.4.2023.10190")]
...@@ -12,6 +12,7 @@ using System.Threading.Tasks; ...@@ -12,6 +12,7 @@ using System.Threading.Tasks;
namespace Njzj.Bocoms.Openapis namespace Njzj.Bocoms.Openapis
{ {
[RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementGenerateReceiveCode : RestfulExecution<Settlement> public class SettlementGenerateReceiveCode : RestfulExecution<Settlement>
{ {
public List<Guid> SettlementKvids { get; set; } public List<Guid> SettlementKvids { get; set; }
...@@ -106,47 +107,100 @@ namespace Njzj.Bocoms.Openapis ...@@ -106,47 +107,100 @@ namespace Njzj.Bocoms.Openapis
} }
} }
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReceiveCodeCheckState : RestfulExecution<ReceiveCode> public class ReceiveCodeCheckState : RestfulExecution<ReceiveCode>
{ {
public string PayMerTranNo { get; set; } public string PayMerTranNo { get; set; }
public List<Guid> SettlementKvids { get; set; }
public override object OnExecution(IRequest req, IResponse res) public override object OnExecution(IRequest req, IResponse res)
{ {
PayMerTranNo.ThrowIfNullOrEmpty("请传入订单号!"); (PayMerTranNo.IsNullOrEmpty() && SettlementKvids.IsNullOrEmpty()).ThrowIfTrue("请传入订单号!");
//PayMerTranNo.ThrowIfNullOrEmpty("请传入订单号!");
var conn = KiviiContext.GetOpenedDbConnection<ReceiveCode>(); var conn = KiviiContext.GetOpenedDbConnection<ReceiveCode>();
var existCode = conn.Single<ReceiveCode>(o => o.pay_mer_tran_no == PayMerTranNo);
if (existCode == null) throw new Exception("未找到此扫码订单");
var rtns = new RestfulExecutionResponse<ReceiveCode>(); var rtns = new RestfulExecutionResponse<ReceiveCode>();
rtns.Results = new List<ReceiveCode>(); rtns.Results = new List<ReceiveCode>();
List<string> payTranNos = new List<string>();
if (existCode.tran_state != "PROCESS") if (!PayMerTranNo.IsNullOrEmpty()) payTranNos.Add(PayMerTranNo);
if (!SettlementKvids.IsNullOrEmpty())
{ {
rtns.Results.Add(existCode); conn.InitEntityType<ReceiveCodeDetail>();
return rtns; var query = conn.From<ReceiveCodeDetail>();
} query.Where(o => Sql.In(o.BizKvid, SettlementKvids));
query.OrderByDescending(o => o.CreateTime);
var existDetails = conn.Select<ReceiveCodeDetail>(query);
if (!existDetails.IsNullOrEmpty())
{
var paymerNos = existDetails.ConvertAll(o => o.PayMerTranNo).Distinct().ToList();
if (!paymerNos.IsNullOrEmpty())
{
foreach (var o in paymerNos)
{
if (!o.IsNullOrEmpty() && !payTranNos.Contains(o)) payTranNos.Add(o);
}
}
}
var order = Extension.GetReceiveCodeOrder(PayMerTranNo); }
if (order.rsp_body.tran_state != existCode.tran_state) if (!payTranNos.IsNullOrEmpty())
{ {
existCode.tran_state = order.rsp_body.tran_state; var existCodes = conn.Select<ReceiveCode>(o => Sql.In(o.pay_mer_tran_no, payTranNos));
existCode.AddOnlyProperties(o => o.tran_state); if (!existCodes.IsNullOrEmpty())
existCode.tran_state_code = order.rsp_body.tran_state_code; {
existCode.AddOnlyProperties(o => o.tran_state_code); foreach (var existCode in existCodes)
existCode.tran_state_msg = order.rsp_body.tran_state_msg; {
existCode.AddOnlyProperties(o => o.tran_state_msg); if (existCode.tran_state.ToUpper() == "SUCCESS")//查出来已经成功付款了 直接返回
existCode.mer_memo = order.rsp_body.mer_memo; {
existCode.AddOnlyProperties(o => o.mer_memo); rtns.Results.Add(existCode);
existCode.total_amount = order.rsp_body.total_amount; }
existCode.AddOnlyProperties(o => o.total_amount); else//如果查出来并不是成功付款,就去调用交行接口查看返回值情况,根据返回值选择性更新当前订单信息或者订单超时支付等一些问题就要从系统中删除
existCode.order_status = order.rsp_body.order_status; {
existCode.AddOnlyProperties(o => o.order_status); try
existCode.tran_content = order.rsp_body.tran_content; {
existCode.AddOnlyProperties(o => o.tran_content); var order = Extension.GetReceiveCodeOrder(existCode.pay_mer_tran_no);
conn.UpdateOnly(existCode); if (order.rsp_body.tran_state.ToUpper() == "SUCCESS")//成功付款的情况
existCode.RemoveAllOnlyProperties(); {
existCode.tran_state = order.rsp_body.tran_state;
existCode.AddOnlyProperties(o => o.tran_state);
existCode.tran_state_code = order.rsp_body.tran_state_code;
existCode.AddOnlyProperties(o => o.tran_state_code);
existCode.tran_state_msg = order.rsp_body.tran_state_msg;
existCode.AddOnlyProperties(o => o.tran_state_msg);
existCode.mer_memo = order.rsp_body.mer_memo;
existCode.AddOnlyProperties(o => o.mer_memo);
existCode.total_amount = order.rsp_body.total_amount;
existCode.AddOnlyProperties(o => o.total_amount);
existCode.order_status = order.rsp_body.order_status;
existCode.AddOnlyProperties(o => o.order_status);
existCode.tran_content = order.rsp_body.tran_content;
existCode.AddOnlyProperties(o => o.tran_content);
conn.UpdateOnly(existCode);
existCode.RemoveAllOnlyProperties();
}
else if (order.rsp_body.tran_state.ToUpper() == "PROCESS")//仍然在操作中的情况
{
if (existCode.CreateTime.AddMinutes(6) < DateTime.Now) existCode.ReceiveCodeDelete();//超过6分钟 二维码已经过期,直接删除
else rtns.Results.Add(existCode);
}
else//失败的情况
{
existCode.ReceiveCodeDelete();
}
}
catch (Exception ex)
{
existCode.ReceiveCodeDelete();
throw ex;
}
}
}
}
} }
rtns.Results.Add(existCode);
return rtns; return rtns;
} }
......
...@@ -44,7 +44,7 @@ namespace Njzj.Bocoms.Openapis ...@@ -44,7 +44,7 @@ namespace Njzj.Bocoms.Openapis
bizKvids.RemoveAll(o => o == Guid.Empty); bizKvids.RemoveAll(o => o == Guid.Empty);
if (bizKvids.IsNullOrEmpty()) if (bizKvids.IsNullOrEmpty())
{ {
var updateWriteOffs=connE.From<WriteOffResultNotify>(); var updateWriteOffs = connE.From<WriteOffResultNotify>();
updateWriteOffs = updateWriteOffs.Update(o => o.Status); updateWriteOffs = updateWriteOffs.Update(o => o.Status);
updateWriteOffs = updateWriteOffs.Where(o => Sql.In(o.Kvid, kvids)); updateWriteOffs = updateWriteOffs.Where(o => Sql.In(o.Kvid, kvids));
connE.UpdateOnly(new WriteOffResultNotify { Status = int.MaxValue }, updateWriteOffs); connE.UpdateOnly(new WriteOffResultNotify { Status = int.MaxValue }, updateWriteOffs);
...@@ -64,12 +64,14 @@ namespace Njzj.Bocoms.Openapis ...@@ -64,12 +64,14 @@ namespace Njzj.Bocoms.Openapis
return true; return true;
} }
var preSettlements = settlements.Where(o => o.AmountPayment == 0).ToList();//需要进行匹配核销的结算 var preSettlements = settlements.Where(o => o.AmountPayment == 0).ToList();//需要进行匹配核销的结算
var notMatchBizKvids=new List<Guid>(); var notMatchBizKvids = new List<Guid>();
foreach (var kvid in bizKvids) foreach (var kvid in bizKvids)
{ {
if (!preSettlements.Exists(o => o.Kvid == kvid)) notMatchBizKvids.Add(kvid); if (!preSettlements.Exists(o => o.Kvid == kvid)) notMatchBizKvids.Add(kvid);
} }
var err = string.Empty;
writeOffs.RemoveAll(o => Sql.In(o.BizKvid, notMatchBizKvids)); writeOffs.RemoveAll(o => Sql.In(o.BizKvid, notMatchBizKvids));
var matchWriteOffs = new List<WriteOffResultNotify>(); var matchWriteOffs = new List<WriteOffResultNotify>();
var breakWriteOffs = new List<WriteOffResultNotify>();//错误消息队列 要移除的 var breakWriteOffs = new List<WriteOffResultNotify>();//错误消息队列 要移除的
...@@ -80,6 +82,7 @@ namespace Njzj.Bocoms.Openapis ...@@ -80,6 +82,7 @@ namespace Njzj.Bocoms.Openapis
if (item.biz_content.bill_wo_state != "03") if (item.biz_content.bill_wo_state != "03")
{ {
TaskContext.Message = $"Error:10001,[{item.BillId}]账单核销状态不是03-全额核销!"; TaskContext.Message = $"Error:10001,[{item.BillId}]账单核销状态不是03-全额核销!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
bool matched = false; bool matched = false;
...@@ -91,27 +94,33 @@ namespace Njzj.Bocoms.Openapis ...@@ -91,27 +94,33 @@ namespace Njzj.Bocoms.Openapis
matched = false; matched = false;
break; break;
} }
var split = pay.vch_no.Split('-'); var split = pay.vch_no.Split('-');//vch_no一般16位,正常流水号是17位,例如EBG00000334545512
if (split.Length != 3) if (split.Length < 2)
{ {
TaskContext.Message = $"Error:10002,[{item.BillId}]vch_no号格式不符合Split规则!"; TaskContext.Message = $"Error:10002,[{item.BillId}]vch_no号[{pay.vch_no}]格式不符合Split规则!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
var serialNumber = split[1]; var serialNumber = split[1];
var number = split[2].Substring(split[2].Length - 1, 1); if (split.Length > 2)
serialNumber = $"{serialNumber}{number}"; {
var number = split[2].Substring(split[2].Length - 1, 1);
serialNumber = $"{serialNumber}{number}";
}
if (serialNumber.IsNullOrEmpty()) if (serialNumber.IsNullOrEmpty())
{ {
TaskContext.Message = $"Error:10003,[{item.BillId}]vch_no截取的流水号是空!"; TaskContext.Message = $"Error:10003,[{item.BillId}]vch_no截取的流水号是空!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
serialNumbers.Add(serialNumber); var payment = connF.Single<Payment>(o => o.SerialNumber.StartsWith(serialNumber) && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Bank);
var payment = connF.Single<Payment>(o => o.SerialNumber == serialNumber && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Bank);
if (payment == null) if (payment == null)
{ {
TaskContext.Message = $"Error:20001,[{item.BillId}]未找到此流水号[{serialNumber}]的到账信息!"; TaskContext.Message = $"Error:20001,[{item.BillId}]未找到此流水号[{serialNumber}]的到账信息!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
serialNumbers.Add(payment.SerialNumber);
payments.Add(payment); payments.Add(payment);
matched = true; matched = true;
} }
...@@ -127,13 +136,14 @@ namespace Njzj.Bocoms.Openapis ...@@ -127,13 +136,14 @@ namespace Njzj.Bocoms.Openapis
updateWriteOffs = updateWriteOffs.Where(o => Sql.In(o.BizKvid, notMatchBizKvids)); updateWriteOffs = updateWriteOffs.Where(o => Sql.In(o.BizKvid, notMatchBizKvids));
connE.UpdateOnly(new WriteOffResultNotify { Status = int.MaxValue }, updateWriteOffs); connE.UpdateOnly(new WriteOffResultNotify { Status = int.MaxValue }, updateWriteOffs);
} }
if (matchWriteOffs.IsNullOrEmpty()) if (matchWriteOffs.IsNullOrEmpty())
{ {
TaskContext.Message = $"{writeOffs.Count}条待处理通知,尚未匹配到流水信息!"; TaskContext.Message = $"{writeOffs.Count}条待处理通知,尚未匹配到流水信息!";
err += TaskContext.Message + Environment.NewLine;
return true; return true;
} }
#endregion #endregion
#region 合并数据库连接,并启用事务 #region 合并数据库连接,并启用事务
IDbTransaction tranE = null, tranF = null; IDbTransaction tranE = null, tranF = null;
...@@ -166,6 +176,7 @@ namespace Njzj.Bocoms.Openapis ...@@ -166,6 +176,7 @@ namespace Njzj.Bocoms.Openapis
if (writeOff == null) if (writeOff == null)
{ {
TaskContext.Message = $"Error:10004,[{settlement.Kvid}]未找到此账单通知信息,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}!"; TaskContext.Message = $"Error:10004,[{settlement.Kvid}]未找到此账单通知信息,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
var currentPayments = new List<Payment>(); var currentPayments = new List<Payment>();
...@@ -173,37 +184,47 @@ namespace Njzj.Bocoms.Openapis ...@@ -173,37 +184,47 @@ namespace Njzj.Bocoms.Openapis
foreach (var pay in writeOff.biz_content.pay_detail_list) foreach (var pay in writeOff.biz_content.pay_detail_list)
{ {
var splitSerial = pay.vch_no.Split('-'); var splitSerial = pay.vch_no.Split('-');
if (splitSerial.Length != 3) if (splitSerial.Length < 2)
{ {
TaskContext.Message = $"Error:10005,[{writeOff.BillId}]vch_no号格式不符合Split规则,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}!"; TaskContext.Message = $"Error:10005,[{writeOff.BillId}]vch_no号格式不符合Split规则,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}!";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
//var serialNumber = splitSerial[1]; //var serialNumber = splitSerial[1];
var serialNumber = splitSerial[1]; var serialNumber = splitSerial[1];
var number = splitSerial[2].Substring(splitSerial[2].Length - 1, 1); if (splitSerial.Length > 2)
serialNumber = $"{serialNumber}{number}"; {
var number = splitSerial[2].Substring(splitSerial[2].Length - 1, 1);
serialNumber = $"{serialNumber}{number}";
}
//var number = splitSerial[2].Substring(splitSerial[2].Length - 1, 1);
//serialNumber = $"{serialNumber}{number}";
if (serialNumber.IsNullOrEmpty()) if (serialNumber.IsNullOrEmpty())
{ {
TaskContext.Message = $"Error:10006,[{writeOff.BillId}]vch_no截取的流水号是空,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}"; TaskContext.Message = $"Error:10006,[{writeOff.BillId}]vch_no截取的流水号是空,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
var payment = payments.FirstOrDefault(o => o.SerialNumber == serialNumber); var payment = payments.FirstOrDefault(o => o.SerialNumber.StartsWith(serialNumber));
if (payment == null) if (payment == null)
{ {
TaskContext.Message = $"Error:20002,[{writeOff.BillId}]未找到此流水号[{serialNumber}]的到账信息,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}"; TaskContext.Message = $"Error:20002,[{writeOff.BillId}]未找到此流水号[{serialNumber}]的到账信息,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
var amountTotal = pay.jnl_write_off_amt.ToDecimal(); var amountTotal = pay.jnl_write_off_amt.ToDecimal();
if (payment.Amount - payment.AmountUsed < amountTotal) if (payment.Amount - payment.AmountUsed < amountTotal)
{ {
TaskContext.Message = $"Error:20003,流水[{payment.SerialNumber}]可用金额不足,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}"; TaskContext.Message = $"Error:20003,流水[{payment.SerialNumber}]可用金额不足,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
//var splits = connF.Select<Payment>(o => o.RootKvid==payment.Kvid && o.OwnerKvid == settlement.OwnerKvid && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Split && o.Currency == settlement.Currency); //var splits = connF.Select<Payment>(o => o.RootKvid==payment.Kvid && o.OwnerKvid == settlement.OwnerKvid && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Split && o.Currency == settlement.Currency);
var splits = connF.Select<Payment>(o => o.RootKvid== payment.Kvid && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Split && o.Currency == settlement.Currency); var splits = connF.Select<Payment>(o => o.RootKvid == payment.Kvid && o.OffsetKvid == Guid.Empty && o.Type == PaymentType.Split && o.Currency == settlement.Currency);
if (splits.IsNullOrEmpty()) if (splits.IsNullOrEmpty())
{ {
TaskContext.Message = $"Error:20004,流水[{payment.SerialNumber}]暂未认领,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}"; TaskContext.Message = $"Error:20004,流水[{payment.SerialNumber}]暂未认领,WO:{matchWriteOffs.Count},ST:{preSettlements.Count},CST:{preSettlements.FindIndex(o => o.Kvid == settlement.Kvid)}";
err += TaskContext.Message + Environment.NewLine;
continue; continue;
} }
foreach (var split in splits) foreach (var split in splits)
...@@ -234,7 +255,7 @@ namespace Njzj.Bocoms.Openapis ...@@ -234,7 +255,7 @@ namespace Njzj.Bocoms.Openapis
amountTotal -= amountSplit; amountTotal -= amountSplit;
} }
} }
} }
if (!currentPayments.IsNullOrEmpty()) if (!currentPayments.IsNullOrEmpty())
{ {
...@@ -258,6 +279,9 @@ namespace Njzj.Bocoms.Openapis ...@@ -258,6 +279,9 @@ namespace Njzj.Bocoms.Openapis
} }
finally finally
{ {
Console.WriteLine("----------------------------------------------------------------------------------------");
Console.WriteLine(err);
Console.WriteLine("----------------------------------------------------------------------------------------");
if (!serialNumbers.IsNullOrEmpty()) if (!serialNumbers.IsNullOrEmpty())
{ {
var th = KiviiContext.NewThread(() => var th = KiviiContext.NewThread(() =>
...@@ -267,7 +291,7 @@ namespace Njzj.Bocoms.Openapis ...@@ -267,7 +291,7 @@ namespace Njzj.Bocoms.Openapis
th.Start(); th.Start();
} }
} }
return true; return true;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment