private DynamicObject getbandobject(Context ctx, JNBandPara actband) { int actbandid = actband.bandid; DynamicObject[] bandIDs = BusinessDataServiceHelper.Load(ctx, new object[] { actbandid }, (MetaDataServiceHelper.Load(ctx, "CN_BANKACNT") as FormMetadata).BusinessInfo.GetDynamicObjectType()); return(bandIDs.FirstOrDefault()); }
/// <summary> /// 查询余额 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public JNBandBalance checkamount(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); string token = checkin(ctx, actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0005</trncod> <token>{3}</token> </head> <trans> <trn-b2e0005-rq> <b2e0005-rq> <account> <ibknum>{4}</ibknum> <actacn>{5}</actacn> </account> </b2e0005-rq> </trn-b2e0005-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, bandNUMBER, ACNTBRANCHNUMBER); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNodeList xxList = xx.GetElementsByTagName("balance"); //取得节点名为row的XmlNode集合 double bokbal = Convert.ToDouble(xxList[0]["bokbal"].Value); //账面余额 double avabal = Convert.ToDouble(xxList[0]["avabal"].Value);; //有效余额 double stpamt = Convert.ToDouble(xxList[0]["stpamt"].Value);; //圈存余额 double ovramt = Convert.ToDouble(xxList[0]["ovramt"].Value);; //透资余额 JNBandBalance amount = new JNBandBalance(); amount.bokbal = bokbal; amount.bokbal = avabal; amount.stpamt = stpamt; amount.ovramt = ovramt; return(amount); }
/// <summary> /// 签入 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public string checkin(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); string F_JNOprpwd = Convert.ToString(urlobject["F_JNOprpwd"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0001</trncod> </head> <trans> <trn-b2e0001-rq> <b2e0001-rq> <custdt>{3}</custdt> <oprpwd>{4}</oprpwd> </b2e0001-rq> </trn-b2e0001-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, F_JNcustdt, F_JNOprpwd); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode b2enote = transnote.SelectSingleNode("trn-b2e0001-rs"); XmlNode tokennote = b2enote.SelectSingleNode("token"); string token = tokennote.InnerText; return(token); }
/// <summary> /// 签出 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> public void checkout(Context ctx, JNBandPara actband) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return; } #endregion string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0002</trncod> </head> <trans> <trn-b2e0002-rq> <b2e0002-rq> <custdt>{3}</custdt> </b2e0002-rq> </trn-b2e0002-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, F_JNcustdt); string Xmldata = BandPost(url, xmlMsg, 600); }
/// <summary> /// 实际运行的Run 方法 /// </summary> /// <param name="ctx"></param> /// <param name="schedule"></param> public void Run(Context ctx, Schedule schedule) { DateTime currentTime = new System.DateTime(); JNBandPara actband = new JNBandPara(); JNBand findbandservice = new JNBand(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string sql = ""; sql = string.Format(@"select t1.FENTRYID,t1.F_JNOBSSID,t2.FACCOUNTID from T_AP_PAYBILLENTRY_B t1 join T_AP_PAYBILLENTRY t2 on t2.fid=t1.fid join T_AP_PAYBILL t3 on t1.FID=t3.FID where DATEDIFF(DAY,GETDATE(),FAPPROVEDATE)>-10 and (t1.F_JNOBSSID is not null and t1.F_JNOBSSID <>'')"); DynamicObjectCollection rundatas = DBUtils.ExecuteDynamicObject(ctx, sql); string token = ""; int i = 0; foreach (var rundata in rundatas) { FormMetadata formMetadata = MetaDataServiceHelper.Load(ctx, "CN_BANKACNT") as FormMetadata; DynamicObject FrACCOUNT = BusinessDataServiceHelper.LoadSingle( ctx, rundata["FACCOUNTID"], formMetadata.BusinessInfo.GetDynamicObjectType()); DynamicObject FrBAND = FrACCOUNT["BANKID"] as DynamicObject; actband.bandid = Convert.ToInt32(FrACCOUNT["Id"]); //actband.addr = Convert.ToString(FrACCOUNT["BANKADDRESS"]); actband.name = Convert.ToString(FrACCOUNT["Name"]); actband.bandnum = Convert.ToString(FrACCOUNT["ACNTBRANCHNUMBER"]); actband.cn = Convert.ToString(FrACCOUNT["NUMBER"]); actband.bandname = Convert.ToString(FrBAND["Name"]); string obssid = Convert.ToString(rundata["F_JNOBSSID"]); if (i == 0)//首行获取令牌 { token = findbandservice.checkin(ctx, actband); i++; } string result = ""; if (obssid.Length > 1) { result = findbandservice.findPay(ctx, actband, obssid, token); } if (result.Length > 0) { switch (result) { default: BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "A", "F_JNOBSSID", new object[] { obssid }); break; case "待授权": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; case "ok": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "C", "F_JNOBSSID", new object[] { obssid }); break; case "授权拒绝": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "D", "F_JNOBSSID", new object[] { obssid }); break; case "交易处理中": BusinessDataServiceHelper.SetState(ctx, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; } } //Thread.Sleep(5000); } //throw new NotImplementedException(); if (token.Length > 1) { findbandservice.checkout(ctx, actband); } }
/// <summary> /// 查询交易状态 /// </summary> /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> /// <param name="obssid">银行流水号</param> /// <param name="token">令牌</param> public string findPay(Context ctx, JNBandPara actband, string obssid, string token) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); //string token = checkin(ctx,actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string F_JNcustdt = string.Format("{0:yyyyMMddHHmmss}", currentTime); string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0007</trncod> <token>{3}</token> </head> <trans> <trn-b2e0007-rq> <b2e0007-rq> <insid></insid> <obssid>{4}</obssid> </b2e0007-rq> </trn-b2e0007-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, obssid); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode trnb2enote = transnote.SelectSingleNode("trn-b2e0007-rs"); XmlNode b2enotes = trnb2enote.SelectSingleNode("b2e0007-rs"); XmlNode statusnote = b2enotes.SelectSingleNode("status"); XmlNode rspnote = statusnote.SelectSingleNode("rspmsg"); string rspmsg = rspnote.InnerText; //checkout(ctx,actband); return(rspmsg);//返回银行流水号 }
/// <summary> /// 公对私转账支付 /// </summary> /// /// <param name="Context">上下文</param> /// <param name="actband">我方银行账户</param> /// <param name="actband">对方银行账户</param> /// <param name="actband">金额</param> /// <param name="furinfo">用途</param> /// <param name="F_VTR_Bocflag">是否跨行</param> /// <param name="token">令牌</param> public string BtoCPay(Context ctx, JNBandPara actband, JNBandPara toband, double payamount, string furinfo, int F_VTR_Bocflag, string token) { DynamicObject bandID = getbandobject(ctx, actband); DynamicObject urlobject = getbandUrl(bandID); #region //判断是否是启用的帐套 string database = ctx.DataCenterName; string F_VTR_DataBase = Convert.ToString(urlobject["F_VTR_DataBase"]); if (database != F_VTR_DataBase) { return(""); } #endregion string bandNUMBER = Convert.ToString(bandID["NUMBER"]); string ACNTBRANCHNUMBER = Convert.ToString(bandID["ACNTBRANCHNUMBER"]); //string token = checkin(ctx,actband); string url = Convert.ToString(urlobject["F_JN_ServiceURL"]); string F_JNtermid = Convert.ToString(urlobject["F_JNtermid"]); string F_JNCustid = Convert.ToString(urlobject["F_JNCustid"]); string F_JNCusopr = Convert.ToString(urlobject["F_JNCusopr"]); DateTime currentTime = new System.DateTime(); currentTime = TimeServiceHelper.GetSystemDateTime(ctx); string insid = string.Format("{0:yyyyMMddHHmmssff}", currentTime);//指令ID //我方银行账号 string frbandnum = actband.bandnum; string frcn = actband.cn; string frname = actband.name; //对方银行账号 string tobandnum = toband.bandnum; string tocn = toband.cn; string toname = toband.name; string toadd = toband.addr; string tobandname = toband.bandname; string payamountstr = Convert.ToString(payamount); string F_JNcustdt = string.Format("{0:yyyyMMdd}", currentTime); //F_JNcustdt = "20170330"; string xmlMsg = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?> <bocb2e version=""100"" security=""true"" lang=""chs""> <head> <termid>{0}</termid> <trnid>20060704001</trnid> <custid>{1}</custid> <cusopr>{2}</cusopr> <trncod>b2e0061</trncod> <token>{3}</token> </head> <trans> <trn-b2e0061-rq> <transtype>1</transtype> <b2e0061-rq> <insid>{4}</insid> <obssid></obssid> <fractn> <fribkn>{5}</fribkn> <actacn>{6}</actacn> <actnam>{7}</actnam> </fractn> <toactn> <toibkn>{8}</toibkn> <actacn>{9}</actacn> <toname>{10}</toname> <toaddr>{11}</toaddr> <tobknm>{12}</tobknm> </toactn> <trnamt>{13}</trnamt> <trncur>001</trncur> <priolv>0</priolv> <cuspriolv>0</cuspriolv> <furinfo>{14}</furinfo> <trfdate>{15}</trfdate> <trftime></trftime> <comacn></comacn> <bocflag>{16}</bocflag> </b2e0061-rq> </trn-b2e0061-rq> </trans> </bocb2e> ", F_JNtermid, F_JNCustid, F_JNCusopr, token, insid, frbandnum, frcn, frname, tobandnum, tocn, toname, toadd, tobandname, payamountstr, furinfo, F_JNcustdt, F_VTR_Bocflag); string Xmldata = BandPost(url, xmlMsg, 600); XmlDocument xx = new XmlDocument(); xx.LoadXml(Xmldata); //加载xml XmlNode rootnote = xx.SelectSingleNode("bocb2e"); //指向根节点 XmlNode transnote = rootnote.SelectSingleNode("trans"); XmlNode b2enote = transnote.SelectSingleNode("trn-b2e0061-rs"); if (b2enote == null) { return(""); } XmlNode statusnote = b2enote.SelectSingleNode("b2e0061-rs"); XmlNode obssidnote = statusnote.SelectSingleNode("obssid"); //XmlNode rspnote = statusnote.SelectSingleNode("rspmsg"); string rspmsg = obssidnote.InnerText; //checkout(ctx,actband); return(rspmsg);//返回银行流水号 }
/// <summary> /// 操作执行前逻辑 /// </summary> /// <param name="e"></param> public override void BeginOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgs e) { JNBandPara actband = new JNBandPara(); JNBandPara toband = new JNBandPara(); double payamount = 0; var billGroups = e.DataEntitys; string database = this.Context.DataCenterName; string token = ""; int i = 0; foreach (var billGroup in billGroups) { DynamicObject BillType = billGroup["BillTypeID"] as DynamicObject; string BillTypeName = Convert.ToString(BillType["name"]); if (BillTypeName != "其他业务付款单") { DynamicObjectCollection BILLENTRYDATAs = billGroup["PAYBILLENTRY"] as DynamicObjectCollection; foreach (var BILLENTRYDATA in BILLENTRYDATAs) { DynamicObject FrACCOUNT = BILLENTRYDATA["FACCOUNTID"] as DynamicObject; int SETTLETYPEID = Convert.ToInt16(BILLENTRYDATA["SETTLETYPEID_Id"]); if (FrACCOUNT != null) { DynamicObject FrBAND = FrACCOUNT["BANKID"] as DynamicObject; if (FrBAND != null && SETTLETYPEID == 4) { actband.bandid = Convert.ToInt32(BILLENTRYDATA["FACCOUNTID_Id"]); //actband.addr = Convert.ToString(FrACCOUNT["BANKADDRESS"]); actband.name = Convert.ToString(FrACCOUNT["Name"]); actband.bandnum = Convert.ToString(FrACCOUNT["ACNTBRANCHNUMBER"]); actband.cn = Convert.ToString(FrACCOUNT["NUMBER"]); actband.bandname = Convert.ToString(FrBAND["Name"]); toband.addr = Convert.ToString(BILLENTRYDATA["OpenAddressRec"]); toband.cn = Convert.ToString(BILLENTRYDATA["OPPOSITEBANKACCOUNT"]); toband.bandname = Convert.ToString(BILLENTRYDATA["OPPOSITEBANKNAME"]); toband.name = Convert.ToString(BILLENTRYDATA["OPPOSITECCOUNTNAME"]); payamount = Convert.ToDouble(BILLENTRYDATA["REALPAYAMOUNTFOR"]); Int32 EntryID = Convert.ToInt32(BILLENTRYDATA["Id"]); if (i == 0)//首单获取令牌 { token = checkin(this.Context, actband); i++; } //判断对公对私业务 int RecType = Convert.ToInt16(BILLENTRYDATA["RecType"]); string result = ""; if (RecType == 0)//对公 { result = BtoBPay(this.Context, actband, toband, payamount, "", token); } else//对私 { int F_VTR_Bocflag = Convert.ToInt32(BILLENTRYDATA["F_VTR_Bocflag"]); result = BtoCPay(this.Context, actband, toband, payamount, "", F_VTR_Bocflag, token); } if (result.Length > 0) { BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FSUBMITSTATUS", "B", "FEntryID", new object[] { EntryID }); //BusinessDataServiceHelper.s string sql = string.Format("update T_AP_PAYBILLENTRY_B set F_JNobssid={0} where FEntryID={1}", result, EntryID.ToString()); DBUtils.Execute(this.Context, sql); } else { // 定义交互消息标识,以与其他交互消息区分开 string spensorKey = "JNbandAudit.ServicePlugIn.Operation.S160425ShowInteractionOpPlug.ShowK3DisplayMessage"; // 提示信息的列标题,以“~|~”分开两列 string titleMsg = "提交银行失败"; // 对应的提示信息格式,以"~|~"分开两列,以{n}进行占位 string errMsg = "提交银行失败"; K3DisplayerModel model = K3DisplayerModel.Create(Context, titleMsg); // 消息内容:可以添加多行 string rowMsg = string.Format(errMsg, "提交银行失败"); ((K3DisplayerModel)model).AddMessage(rowMsg); model.Option.SetVariableValue(K3DisplayerModel.CST_FormTitle, "本节点为最后节点,是否继续完成审批?"); // 是否继续按钮 model.FieldAppearances[1].Width = new LocaleValue("300"); model.OKButton.Visible = true; model.OKButton.Caption = new LocaleValue("继续", Context.UserLocale.LCID); model.CancelButton.Visible = true; model.CancelButton.Caption = new LocaleValue("取消", Context.UserLocale.LCID); // 创建一个交互提示错误对象KDInteractionException: // 通过throw new KDInteractionException()的方式,向操作调用者,输出交互信息 KDInteractionException ie = new KDInteractionException(this.Option, spensorKey); // 提示信息显示界面 ie.InteractionContext.InteractionFormId = Kingdee.BOS.Core.FormIdConst.BOS_K3Displayer; // 提示内容 ie.InteractionContext.K3DisplayerModel = model; // 是否需要交互 ie.InteractionContext.IsInteractive = true; // 抛出错误,终止流程 throw ie; } } } } //i++; } } if (token.Length > 1) { checkout(this.Context, actband); } }
/// <summary> /// 操作执行前逻辑 /// </summary> /// <param name="e"></param> public override void BeginOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgs e) { JNBandPara actband = new JNBandPara(); var billGroups = e.DataEntitys; string token = ""; int i = 0; foreach (var billGroup in billGroups) { string result = ""; DynamicObjectCollection BILLENTRYDATAs = billGroup["PAYBILLENTRY"] as DynamicObjectCollection; foreach (var BILLENTRYDATA in BILLENTRYDATAs) { DynamicObject FrACCOUNT = BILLENTRYDATA["FACCOUNTID"] as DynamicObject; DynamicObject FrBAND = FrACCOUNT["BANKID"] as DynamicObject; actband.bandid = Convert.ToInt32(BILLENTRYDATA["FACCOUNTID_Id"]); //actband.addr = Convert.ToString(FrACCOUNT["BANKADDRESS"]); actband.name = Convert.ToString(FrACCOUNT["Name"]); actband.bandnum = Convert.ToString(FrACCOUNT["ACNTBRANCHNUMBER"]); actband.cn = Convert.ToString(FrACCOUNT["NUMBER"]); actband.bandname = Convert.ToString(FrBAND["Name"]); if (i == 0)//首单获取令牌 { token = checkin(this.Context, actband); i++; } string obssid = Convert.ToString(BILLENTRYDATA["F_JNOBSSID"]); if (obssid.Length > 1) { result = findPay(this.Context, actband, obssid, token); } if (result.Length > 0) { switch (result) { default: BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FBankStatus", "A", "F_JNOBSSID", new object[] { obssid }); break; case "待授权": BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; case "ok": BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FBankStatus", "C", "F_JNOBSSID", new object[] { obssid }); break; case "授权拒绝": BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FBankStatus", "D", "F_JNOBSSID", new object[] { obssid }); break; case "交易处理中": BusinessDataServiceHelper.SetState(this.Context, "T_AP_PAYBILLENTRY_B", "FBankStatus", "B", "F_JNOBSSID", new object[] { obssid }); break; } } } } if (token.Length > 1) { checkout(this.Context, actband); } }