From 55005ec0db8db993a05674b058b70f32823407a0 Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 3 May 2018 17:49:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8D=95No.139566?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs | 3 + B3QingDaoWanFu.Web/PluginClass.cs | 3 + B3QingDaoWanFu/B3QingDaoWanFu.csproj | 1 + B3QingDaoWanFu/BL/TrustPayBL.cs | 53 ++++++-- B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs | 6 + B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs | 128 ++++++++++++++++++ 6 files changed, 181 insertions(+), 13 deletions(-) create mode 100644 B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs index f83c5f8..08d80d1 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs @@ -4,11 +4,13 @@ using System.Web.UI.WebControls; using BWP.B3QingDaoWanFu.BL; using BWP.B3QingDaoWanFu.BO; using BWP.B3QingDaoWanFu.BO.NamedValueTemplate; +using BWP.B3QingDaoWanFu.Tasks; using BWP.BWPTrustPayClient.TrustPayRequests; using BWP.Web.CustomPageLayout; using BWP.Web.Layout; using BWP.Web.WebControls; using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework.QueueTasks; namespace BWP.Web.Pages.B3QingDaoWanFu.TrustPay_ { class TrustPayEdit : BaseDmoEditPage { @@ -112,6 +114,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.TrustPay_ { if (MinDmo.PayState == 付款状态.请求支付) { vPanel.Add(new TSButton("完成付款", delegate { mBL.ABCPaySuccess(Dmo); + QueueTaskService.Add(new RecheckTrustPayTask(Dmo.ID)); AspUtil.RedirectAndAlert(this, Request.RawUrl, "完成付款成功"); })); } diff --git a/B3QingDaoWanFu.Web/PluginClass.cs b/B3QingDaoWanFu.Web/PluginClass.cs index edb2af1..d20cad0 100644 --- a/B3QingDaoWanFu.Web/PluginClass.cs +++ b/B3QingDaoWanFu.Web/PluginClass.cs @@ -1,4 +1,5 @@ using BWP.B3ButcherManage; +using BWP.B3QingDaoWanFu.Tasks; using BWP.Web.Pages.B3ButcherManage.Bills.StatPay_; using BWP.Web.Pages.B3QingDaoWanFu.Overlays; using System; @@ -10,6 +11,7 @@ using BWP.B3Sale; using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_; using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework.Pages; +using TSingSoft.WebPluginFramework.TimerTasks; namespace BWP.B3QingDaoWanFu { @@ -27,6 +29,7 @@ namespace BWP.B3QingDaoWanFu GlobalFlags.On(B3SaleConsts.Flags.CustAcceptAnalyseHasFactoryPrice); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.预付款单不关联过磅单); GlobalFlags.On(B3SaleConsts.Flags.SaleOutStoreEnableScan); + TimerConfig.Register(() => "* * * * *", new QueryTrustPayTask()); } } } diff --git a/B3QingDaoWanFu/B3QingDaoWanFu.csproj b/B3QingDaoWanFu/B3QingDaoWanFu.csproj index 20a663d..4fc42d8 100644 --- a/B3QingDaoWanFu/B3QingDaoWanFu.csproj +++ b/B3QingDaoWanFu/B3QingDaoWanFu.csproj @@ -169,6 +169,7 @@ + diff --git a/B3QingDaoWanFu/BL/TrustPayBL.cs b/B3QingDaoWanFu/BL/TrustPayBL.cs index 1b20c32..de62f7e 100644 --- a/B3QingDaoWanFu/BL/TrustPayBL.cs +++ b/B3QingDaoWanFu/BL/TrustPayBL.cs @@ -6,9 +6,14 @@ using BWP.B3Frameworks.BL; using BWP.B3Frameworks.Utils; using BWP.B3QingDaoWanFu.BO; using BWP.B3QingDaoWanFu.BO.NamedValueTemplate; +using BWP.B3QingDaoWanFu.Tasks; +using BWP.B3QingDaoWanFu.Utils; +using BWP.B3Sale.BL; +using BWP.B3Sale.BO; using BWP.BWPTrustPayClient.TrustPayRequests; using Forks.EnterpriseServices.BusinessInterfaces; using TSingSoft.WebPluginFramework; +using TSingSoft.WebPluginFramework.QueueTasks; namespace BWP.B3QingDaoWanFu.BL { [BusinessInterface(typeof(TrustPayBL))] @@ -16,6 +21,7 @@ namespace BWP.B3QingDaoWanFu.BL { long CreateRequest(TrustPay dmo); void ABCPayRequest(TrustPay dmo); void ABCPaySuccess(TrustPay dmo); + void CreateGathering(TrustPay dmo, out long gatheringID); } public class TrustPayBL : EntityBL, ITrustPayBL { @@ -24,7 +30,7 @@ namespace BWP.B3QingDaoWanFu.BL { get { var list = base.MinDmoProperties; list.Add("PayState"); - list.Add("Money"); + list.Add("Money"); list.Add("ABCPay_PaymentURL"); return list; } @@ -36,7 +42,7 @@ namespace BWP.B3QingDaoWanFu.BL { base.doInsert(dmo); } - public long CreateRequest(TrustPay dmo) { + public long CreateRequest(TrustPay dmo) { Insert(dmo); return dmo.ID; } @@ -49,16 +55,17 @@ namespace BWP.B3QingDaoWanFu.BL { req.Money = dmo.Money.Value; req.ResultNotifyURL = HttpContext.Current.Request.Url.ToString(); req.Time = DateTime.Now; - //#if DEBUG - // req.Money = 0.51m; - //#endif + var res = req.Submit(); if (res.IsSuccess) { dmo.ABCPay_No = req.OrderNo; dmo.ABCPay_PaymentURL = res.PaymentURL; dmo.ABCPay_ResultNotifyURL = req.ResultNotifyURL; dmo.PayState = 付款状态.请求支付; - InnerBLUtil.UpdateEntityProperties(Session, dmo, "PayState", "ABCPay_No", "ABCPay_PaymentURL", "ABCPay_ResultNotifyURL"); + dmo.ReqTime = BLContext.Now; + dmo.ReCheckTime = BLContext.Now.AddMinutes(2); + InnerBLUtil.UpdateEntityProperties(Session, dmo, "PayState", "ABCPay_No", "ABCPay_PaymentURL", "ABCPay_ResultNotifyURL", "ReqTime", "ReCheckTime"); + } else { throw new Exception(res.ErrorMessage); } @@ -77,15 +84,35 @@ namespace BWP.B3QingDaoWanFu.BL { } dmo.PayState = 付款状态.付款成功; InnerBLUtil.UpdateEntityProperties(Session, dmo, "PayState"); - AfterFinishPay(dmo); } - - void AfterFinishPay(TrustPay dmo) { - - //创建收款单 - - + public void CreateGathering(TrustPay dmo, out long gatheringID) { + gatheringID = 0; + if (dmo.Gathering_ID > 0) + return; + if (dmo.PayState != 付款状态.付款成功) + return; + var conf = new WanFuOnlineConfig(); + var bl = BIFactory.Create(Session); + var ho = InnerBLUtil.GetSingleDmo(Session, "ID", dmo.AccountCustomer_ID, "Department_ID", "Employee_ID", "Department_Name", "Employee_Name"); + var bill = new Gathering { + GatheringAccount_ID = conf.GatheringAccountID.Value, + AccountCustomer_ID = dmo.AccountCustomer_ID, + AccountingUnit_ID = conf.AccID.Value, + Remark = "手机客户端支付", + ReceiptType_ID = conf.ReceiptTypeID.Value, + Department_ID = ho.Department_ID, + Employee_ID = ho.Employee_ID, + GatheringTime = BLContext.Now, + CreateUser_ID = BLContext.User.ID + }; + bill.Department_Name = ho.Department_Name; + bill.Employee_Name = ho.Employee_Name; + bill.GatheringMoney = dmo.Money; + bill.Domain_ID = dmo.Domain_ID; + bl.Insert(bill); + bl.Check(bill); + gatheringID = bill.ID; } } } diff --git a/B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs b/B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs index d065d91..56d1386 100644 --- a/B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs +++ b/B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs @@ -53,6 +53,12 @@ namespace BWP.B3QingDaoWanFu.BO { [DFPrompt("创建人")] public long? CreateUser_ID { get; set; } + [LogicName("预计复核时间")] + public DateTime? ReCheckTime { get; set; } + + [DbColumn(DefaultValue = 0)] + public bool ReChecked { get; set; } + [ReferenceTo(typeof(Customer), "Name")] [Join("AccountCustomer_ID", "ID")] [LogicName("结账客户")] diff --git a/B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs b/B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs new file mode 100644 index 0000000..187b141 --- /dev/null +++ b/B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs @@ -0,0 +1,128 @@ +using System; +using BWP.B3Frameworks.Utils; +using BWP.B3QingDaoWanFu.BL; +using BWP.B3QingDaoWanFu.BO; +using BWP.B3QingDaoWanFu.BO.NamedValueTemplate; +using BWP.BWPTrustPayClient.TrustPayRequests; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using TSingSoft.WebPluginFramework; +using TSingSoft.WebPluginFramework.QueueTasks; +using TSingSoft.WebPluginFramework.TimerTasks; + +namespace BWP.B3QingDaoWanFu.Tasks { + [Serializable] + public class QueryTrustPayTask : ITimerTask { + + public void Execute() { + var query = new DQueryDom(new JoinAlias(typeof(TrustPay))); + query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("PayState", 付款状态.请求支付)); + query.Where.Conditions.Add(DQCondition.LessThanOrEqual("ReCheckTime", BLContext.Now)); + query.Where.Conditions.Add(DQCondition.EQ("ReChecked", false)); + query.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field("Gathering_ID"))); + query.Columns.Add(DQSelectColumn.Field("ID")); + var list = query.EExecuteList(); + foreach (var id in list) { + QueueTaskService.Add(new RecheckTrustPayTask(id)); + } + } + + public string Name { + get { return "查询未复核农行付款"; } + } + + } + + + [Serializable] + public class RecheckTrustPayTask : ITimerTask { + private readonly long _trustPayID; + + public RecheckTrustPayTask() { + + } + + public RecheckTrustPayTask(long id) { + _trustPayID = id; + } + + public void Execute() { + if (_trustPayID == 0) + return; + + TrustPay trustPay; + using (var session = Dmo.NewSession()) { + trustPay = InnerBLUtil.GetSingleDmo(session, "ID", _trustPayID); + if (trustPay == null || trustPay.AccountCustomer_ID == null) + return; + trustPay.ID = _trustPayID; + if (trustPay.Gathering_ID > 0) { + if (!trustPay.ReChecked) { + trustPay.ReChecked = true; + InnerBLUtil.UpdateEntityProperties(session, trustPay, "ReChecked"); + session.Commit(); + } + return; + } + if (trustPay.PayState == 付款状态.请求支付) { + if (!ABCPaySuccess(session, trustPay)) + return; + trustPay.PayState = 付款状态.付款成功; + } + } + + //创建收款单和事务和更新状态的事务分开 + try { + if (trustPay.PayState == 付款状态.付款成功) { + using (var session = Dmo.NewSession()) { + var bl = BIFactory.Create(session); + long gatheringID; + bl.CreateGathering(trustPay, out gatheringID); + if (gatheringID > 0) { + trustPay.Gathering_ID = gatheringID; + } + session.Commit(); + } + } + } catch (Exception) { + } + + using (var session = Dmo.NewSession()) { + trustPay.ReChecked = trustPay.Gathering_ID > 0; + InnerBLUtil.UpdateEntityProperties(session, trustPay, "Gathering_ID", "PayState", "ReChecked"); + session.Commit(); + } + } + + private static bool ABCPaySuccess(IDmoSessionWithTransaction session, TrustPay trustPay) { + var req = new B3QueryOrderRequest(); + req.OrderNo = trustPay.ABCPay_No; + var res = req.Submit(); + if (!res.IsSuccess) { + throw new Exception(res.ErrorMessage); + } + if (res.StatusIsSuccess()) { + return true; + } + + if (res.Status == "01" || res.Status == "02" || res.Status == "03") { + trustPay.ReCheckTime = BLContext.Now.AddMinutes(5); + InnerBLUtil.UpdateEntityProperties(session, trustPay, "ReCheckTime"); + session.Commit(); + return false; + } + trustPay.ReChecked = true; + InnerBLUtil.UpdateEntityProperties(session, trustPay, "ReChecked"); + session.Commit(); + return false; + } + + public string Name { + get { + return string.Format(string.Format("复核付款单No.{0}", _trustPayID)); + } + } + + } +}