Пример #1
0
        public static string GetFilterString(this FilterScheme scheme, Context ctx, FormMetadata metadata)
        {
            if (scheme.Scheme.IsNullOrEmptyOrWhiteSpace())
            {
                return(string.Empty);
            }

            //字段比较条件元数据。
            var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);

            //过滤模型:解析过滤方案
            ListFilterModel filterModel = new ListFilterModel();

            filterModel.FilterObject.FilterMetaData = filterMetadata;
            filterModel.SetContext(ctx, metadata.BusinessInfo, metadata.BusinessInfo.GetForm().GetFormServiceProvider());
            filterModel.InitFieldList(metadata, null);

            //把过滤方案的XML内容,反序列化为对象
            DcxmlSerializer dcxmlSerializer = new DcxmlSerializer(new PreInsertDataDcxmlBinder());
            SchemeEntity    schemeEntity    = dcxmlSerializer.DeserializeFromString(scheme.Scheme) as SchemeEntity;

            //利用ListFilterModel, 翻译过滤条件
            filterModel.FilterObject.Setting = schemeEntity.FilterSetting;
            string statement = filterModel.FilterObject.GetFilterSQLString(ctx, TimeServiceHelper.GetSystemDateTime(ctx));

            return(statement);
        } //end metthod
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
        {
            if (dataEntities == null || dataEntities.Length <= 0)
            {
                return;
            }

            DateTime dtNow     = TimeServiceHelper.GetSystemDateTime(this.Context);
            DateTime startDate = new DateTime(dtNow.Year, dtNow.Month, 1);
            DateTime endDate   = new DateTime(dtNow.Year, dtNow.Month + 1, 1).AddSeconds(-1);

            string          strSql      = @"SELECT SUM(FALLAMOUNT) FROM T_PUR_POORDERENTRY_F F 
                                INNER JOIN T_PUR_POORDER T ON F.FID = T.FID
                            WHERE T.FDATE >=@StartDate and t.FDATE <=@EndDate ";
            List <SqlParam> sqlParaList = new List <SqlParam>
            {
                new SqlParam("@StartDate", KDDbType.DateTime, startDate),
                new SqlParam("@EndDate", KDDbType.DateTime, endDate)
            };
            var allAmount = DBUtils.ExecuteScalar <decimal>(this.Context, strSql, 0, sqlParaList.ToArray());

            foreach (var et in dataEntities)
            {
                var dyEntrys = et.DataEntity["POOrderEntry"] as DynamicObjectCollection;
                if (dyEntrys != null)
                {
                    foreach (var dy in dyEntrys)
                    {
                        allAmount += Convert.ToDecimal(dy["AllAmount"]);
                        if (allAmount > 100000)
                        {
                            validateContext.AddError(et, new ValidationErrorInfo(
                                                         "",
                                                         Convert.ToString(et.DataEntity[0]),
                                                         et.DataEntityIndex,
                                                         et.RowIndex,
                                                         "E1",
                                                         string.Format("本月的价税合计已经超过十万,禁止保存,当前价税合计为:{0}", allAmount),
                                                         "价税合计超额检查"));
                        }
                    }
                }
            }

            //查询本月的价税合计数
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <summary>
        /// 绑定单据后,上传附件
        /// </summary>
        private string BindForm_UploadAttach()
        {
            if (jSONObject != null)
            {
                JSONArray jSONArray = new JSONArray(jSONObject["NewValue"].ToString());
                if (jSONArray.Count > 0)
                {
                    List <DynamicObject> dynList = new List <DynamicObject>();
                    StringBuilder        sb      = new StringBuilder();
                    for (int i = 0; i < jSONArray.Count; i++)
                    {
                        //获取上传的文件名
                        string serverFileName = (jSONArray[i] as Dictionary <string, object>)["ServerFileName"].ToString();
                        string fileName       = (jSONArray[i] as Dictionary <string, object>)["FileName"].ToString();
                        //文件上传到服务端的临时目录
                        string directory = "FileUpLoadServices\\UploadFiles";
                        //文件的完整路径
                        string fileFullPath = PathUtils.GetPhysicalPath(directory, serverFileName);

                        var formMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, FormIdConst.BOS_Attachment);
                        var dataBuff     = System.IO.File.ReadAllBytes(fileFullPath);
                        var dyn          = new DynamicObject(formMetadata.BusinessInfo.GetDynamicObjectType());

                        if (submitType != 0)
                        {
                            // 将数据上传至文件服务器,并返回上传结果
                            var result = this.UploadAttachment(fileName, dataBuff);
                            if (!result.Success)
                            {
                                // 上传失败,收集失败信息
                                sb.AppendLine(string.Format("附件:{0},上传失败:{1}", fileName, result.Message));
                                continue;
                            }

                            // 通过这个FileId就可以从文件服务器下载到对应的附件
                            dyn["FileId"] = result.FileId;
                        }
                        else
                        {
                            // 数据库的方式是直接保存附件数据
                            dyn["Attachment"] = dataBuff;
                        }
                        string _BillType = this.View.BusinessInfo.GetForm().Id;
                        string _BillNo   = this.View.Model.DataObject["BillNo"].ToString(); //原始BOS单据【绑定实体属性】
                        string _InterID  = this.View.Model.DataObject["Id"].ToString();

                        dyn["BillType"] = _BillType;
                        dyn["BillNo"]   = _BillNo;
                        dyn["InterID"]  = _InterID;

                        // 上传文件服务器成功后才加入列表
                        dyn["AttachmentName"] = fileName;
                        dyn["AttachmentSize"] = Math.Round(dataBuff.Length / 1024.0, 2);
                        dyn["EntryInterID"]   = -1;// 参照属性解读

                        dyn["CreateMen_Id"] = Convert.ToInt32(this.Context.UserId);
                        dyn["CreateMen"]    = GetUser(this.Context.UserId.ToString());
                        dyn["ModifyTime"]   = dyn["CreateTime"] = TimeServiceHelper.GetSystemDateTime(this.Context);
                        dyn["ExtName"]      = System.IO.Path.GetExtension(fileName);
                        dyn["FileStorage"]  = submitType.ToString();
                        dyn["EntryKey"]     = " ";

                        dynList.Add(dyn);
                    }
                    if (dynList.Count > 0)
                    {
                        // 所有数据加载完成后再一次性保存全部
                        BusinessDataServiceHelper.Save(this.Context, dynList.ToArray());

                        sb.AppendLine();
                        sb.AppendLine(string.Join(",", dynList.Select(dyn => dyn["AttachmentName"].ToString()).ToArray()) + ",上传成功");
                    }

                    //写入上传日志 增加判定 FLog不存在不写入
                    if (this.Model.BillBusinessInfo.GetElement("FLog") != null)
                    {
                        this.Model.SetValue("FLog", sb.ToString());
                    }
                    return(sb.ToString());
                }
            }
            return("");
        }
Пример #8
0
        /// <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);//返回银行流水号
        }
Пример #9
0
        /// <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>
        /// 附件上传至本地临时目录后的回调函数
        /// PlugIn.Args.MobileUploadEventArgs
        /// Kingdee.BOS.Mobile.PlugIn.Args.MobileUploadEventArgs
        /// </summary>
        /// <param name="e">PlugIn.Args.MobileUploadEventArgs e</param>
        public override void AfterMobileUpload(Kingdee.BOS.Mobile.PlugIn.Args.MobileUploadEventArgs e)
        {
            // 获取服务器临时目录    HttpContext.Current.Request.PhysicalApplicationPath + KeyConst.TEMPFILEPATH;
            string tempDirPath = HttpContext.Current.Request.PhysicalApplicationPath + KeyConst.TEMPFILEPATH;
            // 获取附件表的元数据类
            var formMetadata = (FormMetadata)MetaDataServiceHelper.Load(this.Context, FormIdConst.BOS_Attachment);

            //TY:以下是取值 by 田杨
            //string _BillType = this.View.BillBusinessInfo.GetForm().Id;
            string _BillType = this.View.BillView.BusinessInfo.GetForm().Id;
            string _BillNo   = this.View.BillModel.DataObject["BillNo"].ToString(); //原始BOS单据【绑定实体属性】
            string _InterID  = this.View.BillModel.DataObject["Id"].ToString();

            /*  示例代码 从5.0
             * //_BillType = this.View.BillView.BusinessInfo.GetForm().Id;
             * //_BillNo = this.View.BillModel.DataObject["BillNo"];
             * //dyn["BillStatus"] = this.View.BillModel.DataObject["DocumentStatus"];
             * //_InterID = this.View.BillModel.DataObject["Id"];
             */

            List <DynamicObject> dynList = new List <DynamicObject>();
            StringBuilder        sb      = new StringBuilder();

            foreach (FiledUploadEntity file in e.FileNameArray)
            {
                // 检查文件是否成功上传到临时目录
                if (!file.IsSuccess)
                {
                    continue;
                }

                // 检查文件是否存在于临时目录
                var fileName = System.IO.Path.Combine(tempDirPath, file.FileName);
                if (!System.IO.File.Exists(fileName))
                {
                    continue;
                }

                /**
                 * 此处几个关键属性解读:
                 * 1. BillType  关联的模型的FormId
                 * 2. BillNo    关联的单据编号,用于确定此附件是属于哪张单据
                 * 3. InterID   关联的单据/基础资料ID,附件列表就是根据这个ID进行加载
                 * 4. EntryInterID  关联的单据体ID,这里我们只演示单据头,所以固定设置为-1
                 * 5. AttachmentSize    系统统一按照KB单位进行显示,所以需要除以1024
                 * 6. FileStorage   文件存储类型,0为数据库,1为文件服务,2为亚马逊云,3为金蝶云
                 */
                var dataBuff = System.IO.File.ReadAllBytes(fileName);
                var dyn      = new DynamicObject(formMetadata.BusinessInfo.GetDynamicObjectType());

                if (submitType != 0)
                {
                    // 将数据上传至文件服务器,并返回上传结果
                    var result = this.UploadAttachment(file.FileName, dataBuff);
                    if (!result.Success)
                    {
                        // 上传失败,收集失败信息
                        sb.AppendLine(string.Format("附件:{0},上传失败:{1}", file.FileName, result.Message));
                        continue;
                    }

                    // 通过这个FileId就可以从文件服务器下载到对应的附件
                    dyn["FileId"] = result.FileId;
                }
                else
                {
                    // 数据库的方式是直接保存附件数据
                    dyn["Attachment"] = dataBuff;
                }

                /*  示例代码 从6.1
                 * //// 此处我们不绑定到特定的单据,为了简化示例,只实现单纯的文件上传与下载
                 * //dyn["BillType"] = "Test_MOB_Accessory"; // 虚拟FormId
                 * //dyn["BillNo"] = "A00001"; // 虚拟的单据编号
                 * //dyn["InterID"] = "D00001"; // 虚拟的InterId,这个ID将作为我们下载的识别标识
                 *
                 *  示例代码 从5.0
                 * // 而实际插件开发可以从移动单据中获取到这些数据
                 * //dyn["BillType"] = this.View.BillView.BusinessInfo.GetForm().Id;
                 * //dyn["BillNo"] = this.View.BillModel.DataObject["BillNo"];
                 * ////dyn["BillStatus"] = this.View.BillModel.DataObject["DocumentStatus"];
                 * //dyn["InterID"] = this.View.BillModel.DataObject["Id"];
                 */

                dyn["BillType"] = _BillType;
                dyn["BillNo"]   = _BillNo;
                dyn["InterID"]  = _InterID;

                // 上传文件服务器成功后才加入列表
                dyn["AttachmentName"] = file.OldName;
                dyn["AttachmentSize"] = Math.Round(dataBuff.Length / 1024.0, 2);
                dyn["EntryInterID"]   = -1;// 参照属性解读

                dyn["CreateMen_Id"]    = Convert.ToInt32(this.Context.UserId);
                dyn["CreateMen"]       = GetUser(this.Context.UserId.ToString());
                dyn["ModifyTime"]      = dyn["CreateTime"] = TimeServiceHelper.GetSystemDateTime(this.Context);
                dyn["ExtName"]         = System.IO.Path.GetExtension(file.OldName);
                dyn["FileStorage"]     = submitType.ToString();
                dyn["EntryKey"]        = " ";
                dyn["IsAllowDownLoad"] = 0;//参考PC端,历史原因 0 允许下载,1 不允许下载

                dynList.Add(dyn);
            }

            if (dynList.Count > 0)
            {
                // 所有数据加载完成后再一次性保存全部
                BusinessDataServiceHelper.Save(this.Context, dynList.ToArray());

                sb.AppendLine();
                sb.AppendLine(string.Join(",", dynList.Select(dyn => dyn["AttachmentName"].ToString()).ToArray()) + ",上传成功");
            }

            //写入上传日志 增加判定 FLog不存在不写入
            if (this.Model.BillBusinessInfo.GetElement("FLog") != null)
            {
                this.Model.SetValue("FLog", sb.ToString());
            }

            base.AfterMobileUpload(e);

            this.View.ShowMessage("提交成功,是否退出页面?",
                                  MessageBoxOptions.YesNo,
                                  new Action <MessageBoxResult>((result) =>
            {
                if (result == MessageBoxResult.Yes)
                {
                    //关闭页面
                    //JSONObject arg = new JSONObject();
                    //arg.Put("pageId", this.View.PageId);
                    //this.View.AddAction("closeWebViewWithXT", arg);
                    this.View.Close();
                }
            })
                                  );
        }
Пример #11
0
        private string SubmitWorkflow(Context ctx, string formId, string pKValue, string receiverName, string actionResult, string disposition, bool isApprovalFlow)
        {
            string  reason = "";
            DataSet ds     = DBUtils.ExecuteDataSet(ctx, @"select b.FASSIGNID,b.FAPPROVALASSIGNID,a.FACTINSTID,a.FRECEIVERNAMES
                                from t_wf_assign a 
                                join T_WF_APPROVALASSIGN b on a.fassignid=b.fassignid 
                                where b.Fobjecttypeid=@FormID 
                                and b.Fkeyvalue=@pKValue and a.FSTATUS=0",
                                                    new List <SqlParam>
            {
                new SqlParam("@FormID", DbType.String, formId),
                new SqlParam("@pKValue", DbType.String, pKValue)
            });
            DataRow row = ds.Tables[0].Rows.Cast <DataRow>().FirstOrDefault(dr => dr["FRECEIVERNAMES"].ToString().Split(',').Any(r => r == receiverName));

            if (row == null)
            {
                reason = "未找到待办任务";

                return(reason);
            }



            string        assignId         = row["FASSIGNID"].ToString();
            string        approvalAssignId = row["FAPPROVALASSIGNID"].ToString();
            string        _approvalItemId  = AssignmentServiceHelper.OpenApprovalItem(ctx, ctx.UserId, assignId, false);
            FormMetadata  formMetadata     = MetaDataServiceHelper.GetFormMetaData(ctx, formId);
            DynamicObject ObjData          = BusinessDataServiceHelper.LoadSingle(ctx, pKValue, formMetadata.BusinessInfo.GetDynamicObjectType());
            BusinessInfo  businessInfo     = formMetadata.BusinessInfo;

            var _approvalItem = AssignmentServiceHelper.GetApprovalItemById(ctx, _approvalItemId);

            if (_approvalItem == null)
            {
                reason = "待办任务所在的流程实例不在运行中,不能进行处理!";
                return(reason);
            }
            _approvalItem.ObjData        = ObjData;
            _approvalItem.ReceiverPostId = 0;
            _approvalItem.ActionResult   = actionResult;
            _approvalItem.Disposition    = disposition.ToString();
            AssignResult assignResult = _approvalItem.Actions != null?_approvalItem.Actions.FirstOrDefault(i => i.Id == actionResult) : null;

            AssignResultApprovalType approvalType = assignResult != null ? assignResult.ApprovalType : AssignResultApprovalType.None;

            _approvalItem.ActionResultType = approvalType;
            _approvalItem.Status           = ApprovalItemStatus.Completed;
            DateTime timeNow = TimeServiceHelper.GetSystemDateTime(ctx);

            _approvalItem.CompletedTime = timeNow;

            ObjectActivityInstance _activityInstance = AssignmentServiceHelper.ConvertActivityModel(
                ctx, businessInfo, approvalAssignId, _approvalItem);

            var option = OperateOption.Create();

            if (isApprovalFlow)
            {
                ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext()
                {
                    ApprovalItems = new List <ApprovalItem>()
                    {
                        _approvalItem
                    },
                    Info   = businessInfo,
                    Option = option
                };
                assignCtx.NextActHandler   = null;
                assignCtx.RejectReturn     = false;
                assignCtx.ActivityInstance = _activityInstance;
                if (actionResult == AssignResultApprovalType.Reject.ToString())
                {
                    var _policy           = AssignmentServiceHelper.GetApprovalAssignByAssignId(ctx, assignId);
                    var nextHandleWrapper = new Kingdee.BOS.ApprovalFlow.PlugIns.Mobile.MobNextHandleWrapper(assignId, ctx, _policy);
                    assignCtx.Target = nextHandleWrapper.RejectActivityModel.ActivityId;
                }
                ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx);
                reason = "";
                return(reason);
            }
            else
            {
                ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext()
                {
                    ApprovalItems = new List <ApprovalItem>()
                    {
                        _approvalItem
                    },
                    Info   = businessInfo,
                    Option = option
                };
                assignCtx.NextActHandler   = null;
                assignCtx.RejectReturn     = false;
                assignCtx.ActivityInstance = _activityInstance;
                ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx);
                reason = "";
                return(reason);
            }

            //if (actionResult == AssignResultApprovalType.Reject.ToString())
            //{
            //    string actInstId = row["FACTINSTID"].ToString();
            //    Kingdee.BOS.Workflow.App.Core.ProcInstService procInstService = new Kingdee.BOS.Workflow.App.Core.ProcInstService();
            //    var rejectActivityIds = procInstService.GetBackActInstList(ctx, actInstId, true).Select(r => r.ActivityId);
            //    if (!rejectActivityIds.Any())
            //    {

            //        reason = "无驳回节点";
            //        return reason;
            //    }
            //    assignCtx.Target = rejectActivityIds.FirstOrDefault();
            //}
        }