Exemple #1
0
            /// <summary>
            /// 创建Table
            /// </summary>
            /// <param name="up"></param>
            /// <param name="toTable"></param>
            /// <param name="columns"></param>
            public virtual void CreateTable(UnitParameter up, string toTable, params TableColumn[] columns)
            {
                if (columns == null || columns.Length <= 0)
                {
                    return;
                }
                FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'CreateTable',
$table : {0}
}", FrameDLRFlags.SensitiveCase, toTable);
                var            pk      = new List <object>();

                foreach (var c in columns)
                {
                    FrameDLRObject cobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                    cobj.SetValue("$datatype", c.DataType);
                    cobj.SetValue("$precision", c.Precision);
                    cobj.SetValue("$scale", c.Scale);
                    cobj.SetValue("$default", c.Default);
                    cobj.SetValue("$isnull", c.IsPK ? false : c.AllowNull);
                    if (c.IsPK)
                    {
                        pk.Add(c.Name);
                    }
                    express.SetValue(c.Name, cobj);
                }

                express.SetValue("$pk", pk);
                Excute(up, express);
            }
        public string ConvertTo(object obj)
        {
            if (obj == null)
            {
                return("");
            }

            UnitDataCollection udc = null;

            if (obj is UnitDataCollection)
            {
                udc = (UnitDataCollection)obj;
            }
            else
            {
                throw new Exception("QueryByPage2Json无法转化" + obj.GetType().FullName + "类型数据!");
            }
            FrameDLRObject rtn = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

            if (udc.QueryTable != null)
            {
                rtn.SetValue("page", udc.CurrentPage + "");
                rtn.SetValue("total", udc.TotalRow + "");

                rtn.SetValue("rows", udc.QueryTable.Rows);
            }

            return(rtn.ToJSONString());
        }
Exemple #3
0
        public void DoParse(TagParameter p, TagData d)
        {
            tagdata.Value = d;
            foreach (var item in p.BindObject.Items)
            {
                tagdata.Value.Context.AddBindObject(item.Key, item.Value);
            }

            Regex          re         = null;
            Regex          rearg      = new Regex(regArgs);
            Regex          recontent  = new Regex(regcontent);
            FrameDLRObject args       = FrameDLRObject.CreateInstance();
            var            tmpcontent = d.ParsedText;

            if (IsNeedBrace)
            {
                re = new Regex(regstrwithbrace);
            }
            else
            {
                re = new Regex(regstrwithoutbrace);
            }

            if (re.IsMatch(tmpcontent))
            {
                foreach (Match s in re.Matches(tmpcontent))
                {
                    var      content   = s.Value;
                    string   argstr    = rearg.Match(content).Value;
                    string[] argsarray = argstr.Split(',');
                    for (int i = 0; i < argsarray.Length; i++)
                    {
                        if (i < this.ArgNames.Length)
                        {
                            args.SetValue(this.ArgNames[i], argsarray[i]);
                        }
                        else
                        {
                            args.SetValue("arg" + i, argsarray[i]);
                        }
                    }

                    var bracecontent = "";
                    if (IsNeedBrace)
                    {
                        if (recontent.IsMatch(content))
                        {
                            bracecontent = recontent.Match(content).Value;
                        }
                    }

                    tmpcontent = tmpcontent.Replace("#" + content, DoProcess(args, bracecontent));
                }
            }
            d.ParsedText = tmpcontent;
        }
Exemple #4
0
        object map(LogicData arg)
        {
            var rtn       = FrameDLRObject.CreateInstance(@"{
issuccess:true,
msg:'操作成功'
}");
            var uid       = ComFunc.nvl(arg["roleuid"]);
            var functions = ComFunc.nvl(arg["functions"]);

            if (uid == "")
            {
                rtn.issuccess = false;
                rtn.msg       = "缺少角色参数";
                return(rtn);
            }
            BeginTrans();
            var            up      = DB.NewDBUnitParameter();
            FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Query',
$table : 'RoleInfo',
$where:{
    RoleUID:{0}
}
}", uid);
            var            re      = DB.Excute(up, express);

            if (re.QueryTable.RowLength <= 0)
            {
                rtn.issuccess = false;
                rtn.msg       = "角色资料不存在";
                return(rtn);
            }

            express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Delete',
$table : 'Map_RoleFunction',
$where:{
    RoleUID:{0}
}
}", uid);
            DB.Excute(up, express);

            express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Insert',
$table : 'Map_RoleFunction',
RoleUID:{0}
}", uid);
            foreach (var s in functions.Split(','))
            {
                express.SetValue("FunctionNo", s);
                express.SetValue("$acttype", "Insert");
                DB.Excute(up, express);
            }
            CommitTrans();
            return(rtn);
        }
Exemple #5
0
        object saveRoleMap(LogicData arg)
        {
            var rtn   = FrameDLRObject.CreateInstance(@"{
issuccess:true,
msg:'操作成功'
}");
            var uid   = ComFunc.nvl(arg["uid"]);
            var roles = ComFunc.nvl(arg["roles"]);

            if (uid == "")
            {
                return(FrameDLRObject.CreateInstance(false, "缺少角色参数"));
            }

            BeginTrans();
            var            up      = DB.NewDBUnitParameter();
            FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Query',
$table : 'LoginInfo',
$where:{
    UID:{0}
}
}", uid);
            var            re      = DB.Excute(up, express);

            if (re.QueryTable.RowLength <= 0)
            {
                return(FrameDLRObject.CreateInstance(false, "用户资料不存在"));
            }

            express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Delete',
$table : 'Map_LoginRole',
$where:{
    LoginUID:{0}
}
}", uid);
            DB.Excute(up, express);

            express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Insert',
$table : 'Map_LoginRole',
LoginUID:{0}
}", uid);
            foreach (var s in roles.Split(','))
            {
                express.SetValue("RoleUID", s);
                express.SetValue("$acttype", "Insert");
                DB.Excute(up, express);
            }
            CommitTrans();
            return(rtn);
        }
Exemple #6
0
            /// <summary>
            /// 新增一个cookie
            /// </summary>
            /// <param name="name">名称</param>
            /// <param name="value">值</param>
            /// <param name="domain">cookie对应的域,如果不需要则填写null</param>
            /// <param name="expiretime">过期时间</param>
            public void SetCookie(string name, string value, string domain, DateTime expiretime)
            {
                if (_logic.CallContext_Parameter.ExtentionObj.cookie.add == null)
                {
                    _logic.CallContext_Parameter.ExtentionObj.cookie.add = FrameDLRObject.CreateInstance();
                }
                FrameDLRObject item = FrameDLRObject.CreateInstance();

                item.SetValue("name", name);
                item.SetValue("value", value);
                item.SetValue("domain", domain);
                item.SetValue("expire", expiretime);
                ((FrameDLRObject)_logic.CallContext_Parameter.ExtentionObj.cookie.add).SetValue(name, item);
            }
        /// <summary>
        /// 发送模板消息,相关参数和回传,查看https://developers.weixin.qq.com/miniprogram/dev/api-backend/templateMessage.send.html
        /// </summary>
        /// <param name="touser"></param>
        /// <param name="template_id"></param>
        /// <param name="form_id"></param>
        /// <param name="page"></param>
        /// <param name="emphasis_keyword"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public FrameDLRObject SendTemplateMsg(string touser, string template_id, string form_id, string page = "", string emphasis_keyword = "", params KeyValuePair <string, string>[] data)
        {
            var url      = string.Format(SendCustomeServiceMsgUrl, Access_Token);
            var postdata = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

            postdata.touser      = touser;
            postdata.template_id = template_id;
            if (!string.IsNullOrEmpty(page))
            {
                postdata.page = page;
            }
            postdata.form_id = form_id;
            if (data != null)
            {
                FrameDLRObject d = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                foreach (var item in data)
                {
                    d.SetValue(item.Key, new
                    {
                        value = item.Value
                    });
                }
                postdata.data = d;
            }

            if (!string.IsNullOrEmpty(emphasis_keyword))
            {
                postdata.emphasis_keyword = emphasis_keyword;
            }
            FrameDLRObject obj = CallWeixinServer(url, "post", "application/json", null, postdata);

            return(obj);
        }
Exemple #8
0
 /// <summary>
 /// 发送事件请求
 /// </summary>
 /// <param name="method">请求的方法</param>
 /// <param name="url">请求的url</param>
 /// <param name="context">请求的参数上下文</param>
 /// <param name="header">请求的header资料</param>
 /// <param name="postdata">请求的post资料</param>
 /// <returns></returns>
 public string Send(string method, string url, EventsCallContext context = null, FrameDLRObject header = null, FrameDLRObject postdata = null)
 {
     if (header != null)
     {
         foreach (var key in header.Keys)
         {
             if (ComFunc.nvl(header.GetValue(key)).StartsWith("$") && context.ContainsKey(ComFunc.nvl(header.GetValue(key))))
             {
                 header.SetValue(key, context[ComFunc.nvl(header.GetValue(key))]);
             }
         }
     }
     if (postdata != null)
     {
         foreach (var key in postdata.Keys)
         {
             if (ComFunc.nvl(postdata.GetValue(key)).StartsWith("$") && context.ContainsKey(ComFunc.nvl(postdata.GetValue(key))))
             {
                 postdata.SetValue(key, context[ComFunc.nvl(postdata.GetValue(key))]);
             }
         }
     }
     if (method.ToLower() == "get")
     {
         return(Get(url, header));
     }
     else
     {
         return(base.Send(url, postdata, header, method));
     }
 }
Exemple #9
0
        /// <summary>
        /// 設置appSetting的值
        /// </summary>
        /// <param name="key">鍵</param>
        /// <param name="value">值</param>
        public void SetConfiguration(string key, object value)
        {
            FrameDLRObject config = FrameDLRObject.CreateInstance(File.ReadAllText(ConfigFilePath), Constants.FrameDLRFlags.SensitiveCase);

            config.SetValue(key, value);
            File.WriteAllText(ConfigFilePath, config.ToJSONString());
            _config.Reload();
        }
            /// <summary>
            /// 转化成DBExpress表达式
            /// </summary>
            /// <param name="this_data">当前行资料,用于解析表达式中@语句</param>
            /// <returns></returns>
            public FrameDLRObject ToDBExpress(FrameDLRObject this_data = null)
            {
                if (this_data == null)
                {
                    this_data = FrameDLRObject.CreateInstance();
                }

                FrameDLRObject express = FrameDLRObject.CreateInstance($@"{{
$acttype : 'Query',
$orderby : 'sort_no',
$table:'{TableName}'
                }}", EFFC.Frame.Net.Base.Constants.FrameDLRFlags.SensitiveCase);

                foreach (var c in ShowColumns)
                {
                    express.SetValue(c, true);
                }
                if (!string.IsNullOrEmpty(KeyColumn))
                {
                    express.SetValue(KeyColumn, true);
                }
                if (Filter.Count > 0)
                {
                    FrameDLRObject where = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

                    foreach (var witem in Filter)
                    {
                        FrameDLRObject op_express = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                        var            op         = witem.Value.Op.StartsWith("$") ? witem.Value.Op : $"${witem.Value.Op}";
                        //如果w_value为@开头,则表示@后面为本表的栏位名称,则从当前行资料中获取对应的参数的值
                        if (witem.Value.Value.StartsWith("@"))
                        {
                            op_express.SetValue(op, this_data.GetValue(witem.Value.Value.Replace("@", "")));
                        }
                        else
                        {
                            op_express.SetValue(op, witem.Value.Value);
                        }

                        where.SetValue(witem.Key, op_express);
                    }

                    express.SetValue("$where", where);
                }
                return(express);
            }
Exemple #11
0
            /// <summary>
            /// 快速执行简易Update操作
            /// </summary>
            /// <param name="p"></param>
            /// <param name="toTable">目标table</param>
            /// <param name="data">要更新数据对象</param>
            /// <param name="where">只支持and操作</param>
            /// <param name="islog"></param>
            /// <returns></returns>
            public virtual UnitDataCollection QuickUpdate(UnitParameter p, string toTable, object data, object where, bool islog = false)
            {
                FrameDLRObject express      = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Update',
$table : {0}
}", toTable);
                FrameDLRObject dataexpress  = FrameDLRObject.CreateInstance(data);
                FrameDLRObject whereexpress = FrameDLRObject.CreateInstance(where);

                foreach (var item in dataexpress.Items)
                {
                    express.SetValue(item.Key, item.Value);
                }
                if (whereexpress != null && whereexpress.Items.Count > 0)
                {
                    express.SetValue("$where", whereexpress);
                }
                return(Excute(p, express));
            }
Exemple #12
0
            /// <summary>
            /// 呼叫本地logic
            /// </summary>
            /// <param name="logic"></param>
            /// <param name="action"></param>
            /// <param name="p"></param>
            /// <returns></returns>
            public object CallLocalLogic(string logic, string action, params KeyValuePair <string, object>[] p)
            {
                FrameDLRObject dp = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

                foreach (var item in p)
                {
                    dp.SetValue(item.Key, item.Value);
                }
                return(CallLocalLogic(logic, action, dp));
            }
Exemple #13
0
            /// <summary>
            /// 删除一个cookie
            /// </summary>
            /// <param name="name"></param>
            public void RemoveCookie(string name)
            {
                if (_logic.CallContext_Parameter.ExtentionObj.cookie.remove == null)
                {
                    _logic.CallContext_Parameter.ExtentionObj.cookie.remove = FrameDLRObject.CreateInstance();
                }
                FrameDLRObject item = FrameDLRObject.CreateInstance();

                item.SetValue("name", name);
                ((FrameDLRObject)_logic.CallContext_Parameter.ExtentionObj.cookie.remove).SetValue(name, item);
            }
        /// <summary>
        /// EFFC框架中间件基类
        /// </summary>
        /// <param name="next"></param>
        public EFFCWebMiddleWare(RequestDelegate next, IHostingEnvironment hostingEnv, FrameDLRObject options)
        {
            GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, "Web服务启动设定...");
            // This is an HTTP Handler, so no need to store next

            _next    = next;
            _hostenv = hostingEnv;
            Type middlewaretype = typeof(WebMiddleWareProcessOptions);

            if (options != null)
            {
                dynamic dobj = options;

                if (dobj.MiddleWareOptionsType != null)
                {
                    if (dobj.MiddleWareOptionsType is string)
                    {
                        middlewaretype = Type.GetType(ComFunc.nvl(dobj.MiddleWareOptionsType));
                    }
                    else if (dobj.MiddleWareOptionsType is Type && ((Type)dobj.MiddleWareOptionsType).GetTypeInfo().IsSubclassOf(typeof(WebMiddleWareProcessOptions)))
                    {
                        middlewaretype = (Type)dobj.MiddleWareOptionsType;
                    }
                    else
                    {
                        middlewaretype = typeof(WebMiddleWareProcessOptions);
                    }
                }
            }
            _middleware_options = (WebMiddleWareProcessOptions)Activator.CreateInstance(middlewaretype, true);

            GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.INFO, $"{this.GetType().Name}:当前启动中间件加载的Options设定为{middlewaretype.Name},如需要修改,请在调用ProxyManager.UseProxy中的options中设定该参数(MiddleWareOptionsType类型为Type类型,必须为WebMiddleWareProcessOptions类型或其子类)");
            //将以下启动参数下沉到各个module中
            options.SetValue("PagePath4Forbidden", _middleware_options.PagePath4Forbidden);
            options.SetValue("PagePath4NotFound", _middleware_options.PagePath4NotFound);
            options.SetValue("PagePath4Error", _middleware_options.PagePath4Error);
            //各个中间件在此处加载一次代理器
            LoadProxys(GlobalCommon.Proxys, options);
            GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, "Web服务启动设定完成\n");
        }
            /// <summary>
            /// 转成json对象
            /// </summary>
            /// <returns></returns>
            public FrameDLRObject ToJSONObject()
            {
                FrameDLRObject dobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

                if (!string.IsNullOrEmpty(TableName))
                {
                    dobj.SetValue("$ref_table", TableName);
                    dobj.SetValue("$ref_key_column", KeyColumn);
                    dobj.SetValue("$show", ShowColumns.ToArray());
                    FrameDLRObject where = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);


                    foreach (var item in Filter)
                    {
                        FrameDLRObject op = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                        op.SetValue(item.Value.Op, item.Value.Value);
                        where.SetValue(item.Key, op);
                    }
                    dobj.SetValue("$where", where);
                }
                return(dobj);
            }
        protected override void DoProcess(ConsoleParameter p, ConsoleData d)
        {
            FrameDLRObject args = FrameDLRObject.CreateInstance();

            foreach (var item in p.Domain(DomainKey.INPUT_PARAMETER))
            {
                args.SetValue(item.Key, item.Value);
            }
            foreach (var item in p.Domain(DomainKey.CUSTOMER_PARAMETER))
            {
                args.SetValue(item.Key, item.Value);
            }
            var action     = string.IsNullOrEmpty(p.CallAction) ? "load" : p.CallAction;
            var invokelist = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(t => t.Name.ToLower() == action.ToLower() && t.GetParameters().Count() == 1).ToList();

            if (invokelist.Count() != 1)
            {
                throw new NotFoundException($"未找到名为{p.CallAction}的执行方法");
            }

            d.Result = invokelist[0].Invoke(this, new object[] { args });
        }
        /// <summary>
        /// 給新增行寫值
        /// </summary>
        /// <param name="value"></param>
        /// <param name="columnName"></param>
        public void SetNewRowValue(object value, string columnName)
        {
            if (this._new_row == null)
            {
                NewRow();
            }
            if (columnName == null)
            {
                return;
            }
            var dc = this.schema.Where(w => w.ColumnName.ToLower() == columnName.ToLower());

            if (dc.Count() <= 0)
            {
                return;
            }
            if (dc.First().DataType == null)
            {
                dc.First().DataType = value.GetType();
            }
            _new_row.SetValue(columnName, value);
        }
        /// <summary>
        /// 处理Request中的cookie数据
        /// </summary>
        /// <param name="p"></param>
        /// <param name="d"></param>
        protected virtual void ProcessRequestCookie(TParameter p, TData d)
        {
            var context = p.CurrentHttpContext;

            if (p.ExtentionObj.cookie == null)
            {
                p.ExtentionObj.cookie = FrameDLRObject.CreateInstance();
            }
            if (context.Request.Cookies != null && context.Request.Cookies.Count > 0)
            {
                foreach (var key in context.Request.Cookies.Keys)
                {
                    if (key != "ASP.NET_SessionId")
                    {
                        FrameDLRObject item = FrameDLRObject.CreateInstance();
                        item.SetValue("name", key);
                        item.SetValue("value", context.Request.Cookies[key]);

                        ((FrameDLRObject)p.ExtentionObj.cookie).SetValue(ComFunc.nvl(item.GetValue("name")), item);
                    }
                }
            }
        }
Exemple #19
0
            /// <summary>
            /// Copy Data
            /// </summary>
            /// <param name="up"></param>
            /// <param name="from_table">来源表</param>
            /// <param name="to_Table">目标表</param>
            /// <param name="if_not_exists">为true的时候添加not exists的where条件,否则不过滤,注意:该过滤条件不是根据每笔资料进行比对的,而是根据目标表是否存在数据来作为判定依据,因此会出现只要目标表存在资料,无论与来源数据是否相同都不会执行写入操作</param>
            /// <param name="columns">要copy的栏位,指定来源表的栏位,值为目标表的栏位,格式必须为{'from_column':'to_column'}</param>
            /// <param name="where">条件表达式,与Query指令的表达式一样的格式,该表达式用于过滤来源表</param>
            /// <param name="is_log">是否记录log</param>
            public virtual void CopyData(UnitParameter up, string from_table, string to_Table, bool if_not_exists = false, object columns = null, object where = null, bool is_log = false)
            {
                FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'CopyData',
$table : {0},
$to_table:{1},
$if_not_exists:{2}
}", FrameDLRFlags.SensitiveCase, from_table, to_Table, if_not_exists);

                if (columns != null)
                {
                    FrameDLRObject columnexpress = FrameDLRObject.CreateInstance(columns, FrameDLRFlags.SensitiveCase);
                    foreach (var item in columnexpress.Items)
                    {
                        express.SetValue(item.Key, item.Value);
                    }
                }
                if (where != null)
                {
                    express.SetValue("$where", FrameDLRObject.CreateInstance(where, FrameDLRFlags.SensitiveCase));
                }
                Excute(up, express, is_log);
            }
Exemple #20
0
            /// <summary>
            /// 快速执行简易Insert操作
            /// </summary>
            /// <param name="p"></param>
            /// <param name="toTable"></param>
            /// <param name="data"></param>
            /// <param name="islog"></param>
            /// <returns></returns>
            public virtual UnitDataCollection QuickInsert(UnitParameter p, string toTable, object data, bool islog = false)
            {
                FrameDLRObject express     = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'Insert',
$table : {0}
}", toTable);
                FrameDLRObject dataexpress = FrameDLRObject.CreateInstance(data);

                foreach (var item in dataexpress.Items)
                {
                    express.SetValue(item.Key, item.Value);
                }

                return(Excute(p, express, islog));
            }
Exemple #21
0
        public bool BeginCallModule(P p, D d, Action <P, D> callback)
        {
            try
            {
                this.ProcessBeforeRequest(p, d);
                //尝试解决速度慢的问题
                System.Net.ServicePointManager.DefaultConnectionLimit = 100;
                HttpWebRequest hr = GetRequestInstance();

                if (_contenttype.ToLower().StartsWith("put/"))
                {
                    hr.ContentType = _contenttype.Substring(4);
                }
                else
                {
                    hr.ContentType = _contenttype;
                }
                hr.Method = _requestmethod;

                FrameDLRObject requeststate = FrameDLRObject.CreateInstance();
                requeststate.SetValue("request", hr);
                requeststate.SetValue("p", p);
                requeststate.SetValue("d", d);
                requeststate.SetValue("callback", callback);
                var dt1   = DateTime.Now;
                var async = hr.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), requeststate);
                var dt2   = DateTime.Now;
                p.ExtentionObj.asynccallcost = (dt2 - dt1).TotalMilliseconds;
                p.ExtentionObj.async         = async;
                return(true);
            }
            finally
            {
                p.Resources.ReleaseAll();
            }
        }
Exemple #22
0
        /// <summary>
        /// 解析queryString
        /// </summary>
        /// <param name="qr"></param>
        /// <returns></returns>
        public static FrameDLRObject ParseQueryString(string qr)
        {
            FrameDLRObject rtn = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

            if (qr != "")
            {
                var nvc = HttpUtility.ParseQueryString(qr);
                foreach (var key in nvc.AllKeys)
                {
                    rtn.SetValue(key, nvc[key]);
                }
            }

            return(rtn);
        }
Exemple #23
0
        public string ConvertTo(object obj)
        {
            DataTableStd dtt = null;

            if (obj is DataTableStd)
            {
                dtt = (DataTableStd)obj;
            }
            else
            {
                throw new Exception("DataTable2Json无法转化" + obj.GetType().FullName + "类型数据!");
            }
            FrameDLRObject data = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);

            data.SetValue("rows", dtt.Rows);

            return(data.ToJSONString());
        }
Exemple #24
0
        object list(LogicData arg)
        {
            var id = ComFunc.nvl(arg["filter"]);
            var up = DB.NewDBUnitParameter();

            up.SetValue("id", id);
            FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{
$acttype : 'QueryByPage',
$table : 'LoginInfo'
}");

            if (id != "")
            {
                express.SetValue("$where", FrameDLRObject.CreateInstanceFromat(@"{
	$or:[
        {
            LoginID:{
                    $like:{0}
                }
        },
        {
            LoginName:{
                    $like:{0}
                }
        }
    ]
}", id));
            }

            UnitDataCollection re = DB.Excute(up, express);
            var list = re.QueryData <FrameDLRObject>();
            var rtn  = FrameDLRObject.CreateInstance(true, "");

            rtn.data           = list;
            rtn.current_page   = re.CurrentPage;
            rtn.count_per_page = re.Count_Of_OnePage;
            rtn.to_page        = re.CurrentPage;
            rtn.total_page     = re.TotalPage;
            rtn.total_row      = re.TotalRow;

            return(rtn);
        }
Exemple #25
0
        /// <summary>
        /// 处理Response的session数据
        /// </summary>
        /// <param name="p"></param>
        /// <param name="d"></param>
        protected virtual void ProcessResponseSeesion(TParameter p, TData d)
        {
            lock (lockobj)
            {
                var sessionid = ComFunc.nvl(CurrentContext.Request.Cookies["ASP.NET_SessionId"]);
                if (p.IsNeedSessionAbandon)
                {
                    CurrentContext.Session.Clear();
                    GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid);
                }
                else
                {
                    IEnumerable <string> keys = p.Domain(DomainKey.SESSION).Keys;
                    //Websocket下无session,将session对象写入ApplicationCache中用于同步

                    if (!string.IsNullOrEmpty(sessionid))
                    {
                        var removeobj = GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid);
                        if (removeobj != null)
                        {
                            ((FrameDLRObject)removeobj).Dispose();
                        }
                        GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid);
                        FrameDLRObject sessionobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                        foreach (string s in keys)
                        {
                            sessionobj.SetValue(s, ComFunc.CloneObject(p[DomainKey.SESSION, s]));
                        }
                        GlobalCommon.ApplicationCache.Set("__frame_session__" + sessionid, sessionobj, TimeSpan.FromMinutes(20));
                    }
                    //websocket下没有session
                    if (CurrentContext.Session != null)
                    {
                        foreach (string s in keys)
                        {
                            CurrentContext.Session.SetObject(s, ComFunc.CloneObject(p[DomainKey.SESSION, s]));
                        }
                    }
                }
            }
        }
Exemple #26
0
        /// <summary>
        /// 异步调用微信服务
        /// </summary>
        /// <typeparam name="RType"></typeparam>
        /// <param name="url"></param>
        /// <param name="method"></param>
        /// <param name="contenttype"></param>
        /// <param name="header"></param>
        /// <param name="data"></param>
        /// <param name="isneedcert"></param>
        /// <param name="callback"></param>
        /// <param name="recorddata"></param>
        protected void CallWeixinServerAsync <RType>(string url, string method = "POST", string contenttype = "text/json", FrameDLRObject header = null, FrameDLRObject data = null, bool isneedcert = false, Action <object> callback = null, FrameDLRObject recorddata = null)
        {
            var result = GlobalCommon.Proxys["weixinserver"].CallModule <RType>(new
            {
                Url             = url,
                ContentEncoding = Encoding.UTF8,
                ContentType     = string.IsNullOrEmpty(contenttype) ? "text/json" : contenttype,
                Certificate     = isneedcert ? new X509Certificate2(Weixin_Mch_Ssl_Path, Weixin_Mch_Ssl_Pass, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet) : null,
                RequestMethod   = string.IsNullOrEmpty(method) ? "POST" : method,
                PostData        = data,
                Header          = header
            });

            if (callback != null)
            {
                result.ContinueWith(r =>
                {
                    recorddata = recorddata == null ? FrameDLRObject.CreateInstance() : recorddata;
                    recorddata.SetValue("weixincallbackresult", r.Result);
                    callback.Invoke(recorddata);
                });
            }
        }
        /// <summary>
        /// 构建报表查询的DBExpress表达式
        /// </summary>
        /// <param name="tables">关联表信息,格式:
        ///[
        /// {
        /// table_name:'关联表名',
        /// is_main:'是否为主表',
        /// ref_columns:['关联栏位描述,格式:{表名}.{栏位名称}']
        /// }
        ///]</param>
        /// <param name="columns">
        /// 报表栏位信息,格式:
        ///  [
        /// {
        /// table_name:'关联表名,不可为空',
        /// column_name:'栏位名称,不可为空',
        ///  column_display:'表头显示名称,不可为空'
        ///  }
        /// ]
        /// </param>
        /// <returns>返回为null的时候证明无法组合成表达式</returns>
        FrameDLRObject buildQueryJSON(IEnumerable <object> tables, IEnumerable <object> columns)
        {
            FrameDLRObject rtn = FrameDLRObject.CreateInstance();

            rtn.SetValue("$acttype", "Query");
            //找出主表,从表
            var maintable = new List <dynamic>();
            var subtable  = new List <dynamic>();
            var alianmap  = new Dictionary <string, string>();
            var index     = 0;

            foreach (dynamic t in tables)
            {
                if (BoolStd.IsNotBoolThen(t.is_main))
                {
                    maintable.Add(t);
                }
                else
                {
                    subtable.Add(t);
                }
                alianmap.Add(t.table_name, $"t{index}");
                index++;
            }
            if (maintable.Count > 1)
            {
                return(null);
            }


            FrameDLRObject table = FrameDLRObject.CreateInstance();

            table.SetValue(maintable.First().table_name, alianmap[maintable.First().table_name]);
            foreach (dynamic t in subtable)
            {
                var alian = alianmap[t.table_name];
                if (t.ref_columns != null)
                {
                    FrameDLRObject texpress = FrameDLRObject.CreateInstance();
                    texpress.SetValue("$as", alian);
                    var            ref_columns = ((IEnumerable <object>)t.ref_columns).Select(d => ComFunc.nvl(d));
                    FrameDLRObject joinexpress = FrameDLRObject.CreateInstance();
                    texpress.SetValue("$join", joinexpress);
                    FrameDLRObject onexpress = FrameDLRObject.CreateInstance();
                    joinexpress.SetValue("$on", onexpress);
                    foreach (var c in ref_columns)
                    {
                        var left_column      = c.Split('=')[0].Trim();
                        var join_table       = c.Split('=')[1].Trim().Split('.')[0].Trim();
                        var by_column        = c.Split('=')[1].Trim().Split('.')[1].Trim();
                        var alian_join_table = alianmap[join_table];
                        onexpress.SetValue(left_column, $"#sql:{alian_join_table}.{by_column}");
                    }

                    table.SetValue(t.table_name, texpress);
                }
            }
            rtn.SetValue("$table", table);
            foreach (dynamic item in columns)
            {
                var table_name  = item.table_name;
                var column_name = item.column_name;
                if (!alianmap.ContainsKey(table_name))
                {
                    return(null);
                }
                rtn.SetValue(column_name, $"#sql:{alianmap[table_name]}.{column_name}");
            }
            return(rtn);
        }
        public DataCollection DoOperate(ParameterStd p)
        {
            UnitDataCollection rtn  = new UnitDataCollection();
            string             flag = p.GetValue <string>("_unit_action_flag_");
            UnitParameter      up   = (UnitParameter)p;

            if (up.Dao is ADBAccess)
            {
                T   t      = (T)Activator.CreateInstance(typeof(T), true);
                var sqlobj = t.GetSqlFunc(flag)(up);
                if (!(sqlobj is FrameDLRObject))
                {
                    throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject");
                }
                string    sql = sqlobj.sql;
                ADBAccess dba = (ADBAccess)up.Dao;
                DBOParameterCollection dbc = new DBOParameterCollection();
                if (!string.IsNullOrEmpty(sql))
                {
                    string regstr = "";
                    regstr = @"(?<=" + (dba.ParameterFlagChar == "$"?"\\$": dba.ParameterFlagChar) + @")[A-Za-z0-9_]+\d*";
                    string regexpress = @"(?isx)
                                (')                                                           #开始标记“<tag...>”
                                (?>                                                                  #分组构造,用来限定量词“*”修饰范围
                                \1  (?<Open>)                                                 #命名捕获组,遇到开始标记,入栈,Open计数加1
                                |\1  (?<-Open>)                                                   #狭义平衡组,遇到结束标记,出栈,Open计数减1
                                |[^']*                                                   #右侧不为开始或结束标记的任意字符
                                )
                                (?(Open)(?!))                                                        #判断是否还有'OPEN',有则说明不配对,什么都不匹配
                                \1                                                                #结束标记“</tag>”
                     ";
                    Regex  re         = new Regex(regstr);
                    string tmpsql     = "";
                    Regex  re2        = new Regex(regexpress);
                    tmpsql = sql.Replace("''", "#sp#");
                    foreach (Match m in re2.Matches(tmpsql))
                    {
                        tmpsql = tmpsql.Replace(m.Value, "#sp#");
                    }
                    foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql))
                    {
                        if (up.GetValue(m.ToString()) is byte[])
                        {
                            dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary);
                        }
                        else if (up.GetValue(m.ToString()) is DateTime)
                        {
                            dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.DateTime);
                        }
                        else if (up.GetValue(m.ToString()) is int)
                        {
                            dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Int32);
                        }
                        else if (up.GetValue(m.ToString()) is double)
                        {
                            dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Double);
                        }
                        else
                        {
                            dbc.Add(m.ToString(), up.GetValue(m.ToString()));
                        }
                    }
                }
                try
                {
                    rtn.QueryDatas = dba.Query(sql, dbc);
                }catch (Exception ex)
                {
                    FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase);
                    foreach (var item in dbc)
                    {
                        if (item.Value.ParameterValue is DateTime)
                        {
                            dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss"));
                        }
                        else if (item.Value.ParameterValue is DBNull)
                        {
                            dp.SetValue(item.Key, null);
                        }
                        else
                        {
                            dp.SetValue(item.Key, item.Value.ParameterValue);
                        }
                    }
                    GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QuerySql={sql};\nParameters={dp.ToJSONString()}");

                    throw ex;
                }
                if (rtn.QueryDatas != null && rtn.QueryDatas.Tables.Count > 0)
                {
                    rtn.QueryTable = rtn.QueryDatas[0];
                }
            }
            return(rtn);
        }
        /// <summary>
        /// 处理Response的session数据
        /// </summary>
        /// <param name="p"></param>
        /// <param name="d"></param>
        protected virtual void ProcessResponseSeesion(TParameter p, TData d)
        {
            try
            {
                if (CurrentContext.Session == null)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                GlobalCommon.Logger.WriteLog(LoggerLevel.WARN, "当前session无法使用,不做session处理,错误信息:" + ex.Message);
                return;
            }
            lock (lockobj)
            {
                var sessionid = ComFunc.nvl(CurrentContext.Request.Cookies["ASP.NET_SessionId"]);
                if (p.IsNeedSessionAbandon)
                {
                    CurrentContext.Session.Clear();
                    GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid);
                }
                else
                {
                    IEnumerable <string> keys = p.Domain(DomainKey.SESSION).Keys;
                    //Websocket下无session,将session对象写入ApplicationCache中用于同步

                    if (!string.IsNullOrEmpty(sessionid))
                    {
                        var removeobj = GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid);
                        if (removeobj != null)
                        {
                            ((FrameDLRObject)removeobj).Dispose();
                        }
                        GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid);
                        FrameDLRObject sessionobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                        foreach (string s in keys)
                        {
                            sessionobj.SetValue(s, ComFunc.CloneObject(p[DomainKey.SESSION, s]));
                        }
                        GlobalCommon.ApplicationCache.Set("__frame_session__" + sessionid, sessionobj, TimeSpan.FromMinutes(20));

                        //websocket下没有session
                        if (CurrentContext.Session != null)
                        {
                            foreach (string s in keys)
                            {
                                CurrentContext.Session.SetObject(s, ComFunc.CloneObject(p[DomainKey.SESSION, s]));
                            }
                        }


                        if (!IsWebSocket)
                        {
                            keys = CurrentContext.Session.Keys.Cast <string>().Except(keys).ToArray();
                            foreach (string s in keys)
                            {
                                CurrentContext.Session.Remove(s);
                            }
                        }
                    }
                }
            }
        }
Exemple #30
0
        public DataCollection DoOperate(ParameterStd p)
        {
            string flag = p.GetValue <string>("_unit_action_flag_");
            //预执行
            T                  t   = (T)Activator.CreateInstance(typeof(T), true);
            UnitParameter      up  = (UnitParameter)p;
            UnitDataCollection rtn = new UnitDataCollection();

            if (up.Dao is ADBAccess)
            {
                var       sqlobj     = t.GetSqlFunc(flag)(up);
                ADBAccess dba        = (ADBAccess)up.Dao;
                string    regstr     = "";
                string    regexpress = @"(?isx)
                                (')                                                           #开始标记“<tag...>”
                                (?>                                                                  #分组构造,用来限定量词“*”修饰范围
                                \1  (?<Open>)                                                 #命名捕获组,遇到开始标记,入栈,Open计数加1
                                |\1  (?<-Open>)                                                   #狭义平衡组,遇到结束标记,出栈,Open计数减1
                                |[^']*                                                   #右侧不为开始或结束标记的任意字符
                                )
                                (?(Open)(?!))                                                        #判断是否还有'OPEN',有则说明不配对,什么都不匹配
                                \1                                                                #结束标记“</tag>”
                     ";
                string    tmpsql     = "";
                regstr = @"(?<=" + (dba.ParameterFlagChar == "$" ? "\\$" : dba.ParameterFlagChar) + @")[A-Za-z0-9_]+\d*";

                Regex re  = new Regex(regstr);
                Regex re2 = new Regex(regexpress);
                try
                {
                    if (!(sqlobj is FrameDLRObject))
                    {
                        throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject");
                    }

                    string   presql = sqlobj.presql;
                    DBAPageP dbc    = new DBAPageP();
                    //dba.BeginTransaction();
                    if (!string.IsNullOrEmpty(presql))
                    {
                        tmpsql = presql.Replace("''", "#sp#");
                        foreach (Match m in re2.Matches(tmpsql))
                        {
                            tmpsql = tmpsql.Replace(m.Value, "#sp#");
                        }

                        foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql))
                        {
                            dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()));
                        }
                        try
                        {
                            dba.ExecuteNoQuery(presql, dbc.SQL_Parameters);
                        }
                        catch (Exception ex)
                        {
                            FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase);
                            foreach (var item in dbc.SQL_Parameters)
                            {
                                if (item.Value.ParameterValue is DateTime)
                                {
                                    dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss"));
                                }
                                else if (item.Value.ParameterValue is DBNull)
                                {
                                    dp.SetValue(item.Key, null);
                                }
                                else
                                {
                                    dp.SetValue(item.Key, item.Value.ParameterValue);
                                }
                            }
                            GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage PreSql={presql};\nParameters={dp.ToJSONString()}");

                            throw ex;
                        }
                    }
                    //执行翻页查询
                    string sql     = sqlobj.sql;
                    string orderby = sqlobj.orderby;
                    if (!string.IsNullOrEmpty(sql))
                    {
                        tmpsql = sql.Replace("''", "#sp#");
                        foreach (Match m in re2.Matches(tmpsql))
                        {
                            tmpsql = tmpsql.Replace(m.Value, "#sp#");
                        }

                        dbc.SQL_Parameters.Clear();
                        foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql))
                        {
                            if (up.GetValue(m.ToString()) is byte[])
                            {
                                dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary);
                            }
                            else
                            {
                                dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()));
                            }
                        }
                        try
                        {
                            dbc.SQL              = sql;
                            dbc.OrderBy          = orderby;
                            dbc.Count_of_OnePage = up.Count_Of_OnePage;
                            dbc.CurrentPage      = up.CurrentPage;
                            dba.StartPageByCondition(dbc);
                            rtn.QueryTable = dba.GoToPage(up.ToPage);
                            rtn.QueryDatas = new DataSetStd();
                            rtn.QueryDatas.Tables.Add(rtn.QueryTable);
                            rtn.Count_Of_OnePage = up.Count_Of_OnePage;
                            rtn.CurrentPage      = dba.CurrentPage;
                            rtn.TotalPage        = dba.TotalPage;
                            rtn.TotalRow         = dba.TotalRow;
                        }
                        catch (Exception ex)
                        {
                            FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase);
                            foreach (var item in dbc.SQL_Parameters)
                            {
                                if (item.Value.ParameterValue is DateTime)
                                {
                                    dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss"));
                                }
                                else if (item.Value.ParameterValue is DBNull)
                                {
                                    dp.SetValue(item.Key, null);
                                }
                                else
                                {
                                    dp.SetValue(item.Key, item.Value.ParameterValue);
                                }
                            }
                            GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage sql={sql};\n order by={orderby};\nParameters={dp.ToJSONString()}");

                            throw ex;
                        }
                    }
                    //收尾处理
                    string aftersql = sqlobj.aftersql;
                    if (!string.IsNullOrEmpty(aftersql))
                    {
                        tmpsql = aftersql.Replace("''", "#sp#");
                        foreach (Match m in re2.Matches(tmpsql))
                        {
                            tmpsql = tmpsql.Replace(m.Value, "#sp#");
                        }

                        dbc.SQL_Parameters.Clear();
                        foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql))
                        {
                            dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()));
                        }
                        try
                        {
                            dba.ExecuteNoQuery(aftersql, dbc.SQL_Parameters);
                        }catch (Exception ex)
                        {
                            FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase);
                            foreach (var item in dbc.SQL_Parameters)
                            {
                                if (item.Value.ParameterValue is DateTime)
                                {
                                    dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss"));
                                }
                                else if (item.Value.ParameterValue is DBNull)
                                {
                                    dp.SetValue(item.Key, null);
                                }
                                else
                                {
                                    dp.SetValue(item.Key, item.Value.ParameterValue);
                                }
                            }
                            GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage AfterSql={aftersql};\nParameters={dp.ToJSONString()}");

                            throw ex;
                        }
                    }

                    //dba.CommitTransaction();
                }
                catch
                {
                    //if (dba != null)
                    //    dba.RollbackTransaction();
                    throw;
                }
            }
            return(rtn);
        }