Browse Source

需求单No.139566

master
robin 7 years ago
parent
commit
55005ec0db
6 changed files with 181 additions and 13 deletions
  1. +3
    -0
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs
  2. +3
    -0
      B3QingDaoWanFu.Web/PluginClass.cs
  3. +1
    -0
      B3QingDaoWanFu/B3QingDaoWanFu.csproj
  4. +40
    -13
      B3QingDaoWanFu/BL/TrustPayBL.cs
  5. +6
    -0
      B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs
  6. +128
    -0
      B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs

+ 3
- 0
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/TrustPay_/TrustPayEdit.cs View File

@ -4,11 +4,13 @@ using System.Web.UI.WebControls;
using BWP.B3QingDaoWanFu.BL; using BWP.B3QingDaoWanFu.BL;
using BWP.B3QingDaoWanFu.BO; using BWP.B3QingDaoWanFu.BO;
using BWP.B3QingDaoWanFu.BO.NamedValueTemplate; using BWP.B3QingDaoWanFu.BO.NamedValueTemplate;
using BWP.B3QingDaoWanFu.Tasks;
using BWP.BWPTrustPayClient.TrustPayRequests; using BWP.BWPTrustPayClient.TrustPayRequests;
using BWP.Web.CustomPageLayout; using BWP.Web.CustomPageLayout;
using BWP.Web.Layout; using BWP.Web.Layout;
using BWP.Web.WebControls; using BWP.Web.WebControls;
using TSingSoft.WebControls2; using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework.QueueTasks;
namespace BWP.Web.Pages.B3QingDaoWanFu.TrustPay_ { namespace BWP.Web.Pages.B3QingDaoWanFu.TrustPay_ {
class TrustPayEdit : BaseDmoEditPage<TrustPay, ITrustPayBL> { class TrustPayEdit : BaseDmoEditPage<TrustPay, ITrustPayBL> {
@ -112,6 +114,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.TrustPay_ {
if (MinDmo.PayState == .) { if (MinDmo.PayState == .) {
vPanel.Add(new TSButton("完成付款", delegate { vPanel.Add(new TSButton("完成付款", delegate {
mBL.ABCPaySuccess(Dmo); mBL.ABCPaySuccess(Dmo);
QueueTaskService.Add(new RecheckTrustPayTask(Dmo.ID));
AspUtil.RedirectAndAlert(this, Request.RawUrl, "完成付款成功"); AspUtil.RedirectAndAlert(this, Request.RawUrl, "完成付款成功");
})); }));
} }


+ 3
- 0
B3QingDaoWanFu.Web/PluginClass.cs View File

@ -1,4 +1,5 @@
using BWP.B3ButcherManage; using BWP.B3ButcherManage;
using BWP.B3QingDaoWanFu.Tasks;
using BWP.Web.Pages.B3ButcherManage.Bills.StatPay_; using BWP.Web.Pages.B3ButcherManage.Bills.StatPay_;
using BWP.Web.Pages.B3QingDaoWanFu.Overlays; using BWP.Web.Pages.B3QingDaoWanFu.Overlays;
using System; using System;
@ -10,6 +11,7 @@ using BWP.B3Sale;
using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_; using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_;
using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework;
using TSingSoft.WebPluginFramework.Pages; using TSingSoft.WebPluginFramework.Pages;
using TSingSoft.WebPluginFramework.TimerTasks;
namespace BWP.B3QingDaoWanFu namespace BWP.B3QingDaoWanFu
{ {
@ -27,6 +29,7 @@ namespace BWP.B3QingDaoWanFu
GlobalFlags.On(B3SaleConsts.Flags.CustAcceptAnalyseHasFactoryPrice); GlobalFlags.On(B3SaleConsts.Flags.CustAcceptAnalyseHasFactoryPrice);
GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.);
GlobalFlags.On(B3SaleConsts.Flags.SaleOutStoreEnableScan); GlobalFlags.On(B3SaleConsts.Flags.SaleOutStoreEnableScan);
TimerConfig.Register(() => "* * * * *", new QueryTrustPayTask());
} }
} }
} }

+ 1
- 0
B3QingDaoWanFu/B3QingDaoWanFu.csproj View File

@ -169,6 +169,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Rpc\TrustPayRpc.cs" /> <Compile Include="Rpc\TrustPayRpc.cs" />
<Compile Include="Rpc\GatheringRpc.cs" /> <Compile Include="Rpc\GatheringRpc.cs" />
<Compile Include="Tasks\RecheckTrustPayTask.cs" />
<Compile Include="Tasks\SyncSaleOutStoreInfoToMES.cs" /> <Compile Include="Tasks\SyncSaleOutStoreInfoToMES.cs" />
<Compile Include="TypeIOCs\GoodsBLTypeIoc.cs" /> <Compile Include="TypeIOCs\GoodsBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" /> <Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" />


+ 40
- 13
B3QingDaoWanFu/BL/TrustPayBL.cs View File

@ -6,9 +6,14 @@ using BWP.B3Frameworks.BL;
using BWP.B3Frameworks.Utils; using BWP.B3Frameworks.Utils;
using BWP.B3QingDaoWanFu.BO; using BWP.B3QingDaoWanFu.BO;
using BWP.B3QingDaoWanFu.BO.NamedValueTemplate; 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 BWP.BWPTrustPayClient.TrustPayRequests;
using Forks.EnterpriseServices.BusinessInterfaces; using Forks.EnterpriseServices.BusinessInterfaces;
using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework;
using TSingSoft.WebPluginFramework.QueueTasks;
namespace BWP.B3QingDaoWanFu.BL { namespace BWP.B3QingDaoWanFu.BL {
[BusinessInterface(typeof(TrustPayBL))] [BusinessInterface(typeof(TrustPayBL))]
@ -16,6 +21,7 @@ namespace BWP.B3QingDaoWanFu.BL {
long CreateRequest(TrustPay dmo); long CreateRequest(TrustPay dmo);
void ABCPayRequest(TrustPay dmo); void ABCPayRequest(TrustPay dmo);
void ABCPaySuccess(TrustPay dmo); void ABCPaySuccess(TrustPay dmo);
void CreateGathering(TrustPay dmo, out long gatheringID);
} }
public class TrustPayBL : EntityBL<TrustPay>, ITrustPayBL { public class TrustPayBL : EntityBL<TrustPay>, ITrustPayBL {
@ -24,7 +30,7 @@ namespace BWP.B3QingDaoWanFu.BL {
get { get {
var list = base.MinDmoProperties; var list = base.MinDmoProperties;
list.Add("PayState"); list.Add("PayState");
list.Add("Money");
list.Add("Money");
list.Add("ABCPay_PaymentURL"); list.Add("ABCPay_PaymentURL");
return list; return list;
} }
@ -36,7 +42,7 @@ namespace BWP.B3QingDaoWanFu.BL {
base.doInsert(dmo); base.doInsert(dmo);
} }
public long CreateRequest(TrustPay dmo) {
public long CreateRequest(TrustPay dmo) {
Insert(dmo); Insert(dmo);
return dmo.ID; return dmo.ID;
} }
@ -49,16 +55,17 @@ namespace BWP.B3QingDaoWanFu.BL {
req.Money = dmo.Money.Value; req.Money = dmo.Money.Value;
req.ResultNotifyURL = HttpContext.Current.Request.Url.ToString(); req.ResultNotifyURL = HttpContext.Current.Request.Url.ToString();
req.Time = DateTime.Now; req.Time = DateTime.Now;
//#if DEBUG
// req.Money = 0.51m;
//#endif
var res = req.Submit(); var res = req.Submit();
if (res.IsSuccess) { if (res.IsSuccess) {
dmo.ABCPay_No = req.OrderNo; dmo.ABCPay_No = req.OrderNo;
dmo.ABCPay_PaymentURL = res.PaymentURL; dmo.ABCPay_PaymentURL = res.PaymentURL;
dmo.ABCPay_ResultNotifyURL = req.ResultNotifyURL; dmo.ABCPay_ResultNotifyURL = req.ResultNotifyURL;
dmo.PayState = .; 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 { } else {
throw new Exception(res.ErrorMessage); throw new Exception(res.ErrorMessage);
} }
@ -77,15 +84,35 @@ namespace BWP.B3QingDaoWanFu.BL {
} }
dmo.PayState = .; dmo.PayState = .;
InnerBLUtil.UpdateEntityProperties(Session, 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<IGatheringBL>(Session);
var ho = InnerBLUtil.GetSingleDmo<Customer>(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;
} }
} }
} }

+ 6
- 0
B3QingDaoWanFu/BO/TrustPay_/TrustPay.cs View File

@ -53,6 +53,12 @@ namespace BWP.B3QingDaoWanFu.BO {
[DFPrompt("创建人")] [DFPrompt("创建人")]
public long? CreateUser_ID { get; set; } public long? CreateUser_ID { get; set; }
[LogicName("预计复核时间")]
public DateTime? ReCheckTime { get; set; }
[DbColumn(DefaultValue = 0)]
public bool ReChecked { get; set; }
[ReferenceTo(typeof(Customer), "Name")] [ReferenceTo(typeof(Customer), "Name")]
[Join("AccountCustomer_ID", "ID")] [Join("AccountCustomer_ID", "ID")]
[LogicName("结账客户")] [LogicName("结账客户")]


+ 128
- 0
B3QingDaoWanFu/Tasks/RecheckTrustPayTask.cs View File

@ -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<long>();
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<TrustPay>(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<ITrustPayBL>(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));
}
}
}
}

Loading…
Cancel
Save