object CallEvent(string id)
        {
            var    data_str            = ComFunc.nvl(PostDataD.this_data).Replace(" ", "+");
            var    this_data_base64str = ComFunc.IsBase64Then(data_str);
            string this_data_str       = ComFunc.UrlDecode(this_data_base64str);
            var    this_data           = FrameDLRObject.IsJsonThen(this_data_str);
            var    up = DB.NewDBUnitParameter();

            return(DoCallEvent(up, id, this_data));
        }
        /// <summary>
        /// 从加密信息中获取用户信息
        /// </summary>
        /// <param name="session_key"></param>
        /// <param name="rawData"></param>
        /// <param name="signature"></param>
        /// <param name="encryptedData"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public FrameDLRObject GetUserInfo(string session_key, string rawData, string signature, string encryptedData, string iv)
        {
            if (!VaildateUserInfo(rawData, signature, session_key))
            {
                return(null);
            }
            var str = Decrypt(encryptedData, iv, session_key);

            GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"微信小程序校验解密后的串:{str}");
            return(FrameDLRObject.IsJsonThen(str, null, FrameDLRFlags.SensitiveCase));
        }
        object CopyData()
        {
            var up        = DB.NewDBUnitParameter();
            var copy_json = FrameDLRObject.IsJsonThen(File.ReadAllText($"{ServerInfo.ServerRootPath}/DBExpressScripts/CopyData_IC_Staff.json"));

            if (copy_json != null)
            {
                DB.Excute(up, copy_json, true);
            }

            return(new
            {
                code = "success",
                msg = ""
            });
        }
Exemple #4
0
        public override object post()
        {
            var data = PostDataD.data;

            if (!(data is IEnumerable <object>))
            {
                return new
                       {
                           code = "failed",
                           msg  = "参数格式不正确",
                       }
            }
            ;
            var datalist = (IEnumerable <object>)data;

            foreach (dynamic item in datalist)
            {
                if (ComFunc.nvl(item.no) == "")
                {
                    return new
                           {
                               code = "failed",
                               msg  = "编号不可为空"
                           }
                }
                ;

                if (ComFunc.nvl(item.name) == "")
                {
                    return new
                           {
                               code = "failed",
                               msg  = "名称不可为空"
                           }
                }
                ;
                if (ComFunc.nvl(item.type) == "")
                {
                    return new
                           {
                               code = "failed",
                               msg  = "事件类型不可为空"
                           }
                }
                ;
                if (ComFunc.nvl(item.at) == "")
                {
                    return new
                           {
                               code = "failed",
                               msg  = "事件触发时机不可为空"
                           }
                }
                ;
                if (ComFunc.nvl(item.at) == "New")
                {
                    if (ComFunc.nvl(item.parent) != "")
                    {
                        return(new
                        {
                            code = "failed",
                            msg = "触发时机为“全新事件”的时候不可以有父事件"
                        });
                    }
                }
                else
                {
                    if (ComFunc.nvl(item.parent) == "")
                    {
                        return(new
                        {
                            code = "failed",
                            msg = "触发时机为不为“全新事件”的时候必须设定父事件"
                        });
                    }
                }
                if (ComFunc.nvl(item.request_parameters) != "")
                {
                    var dobj = FrameDLRObject.IsJsonThen(ComFunc.nvl(item.request_parameters), null, FrameDLRFlags.SensitiveCase);

                    if (dobj == null)
                    {
                        return new
                               {
                                   code = "failed",
                                   msg  = "参数设定格式不正确"
                               }
                    }
                    ;
                    else
                    {
                        if (ComFunc.nvl(dobj.RequestUrl) == "")
                        {
                            return(new
                            {
                                code = "failed",
                                msg = "参数设定缺少请求URL"
                            });
                        }
                        if (ComFunc.nvl(dobj.RequestMethod) == "")
                        {
                            return(new
                            {
                                code = "failed",
                                msg = "参数设定缺少请求Method"
                            });
                        }
                    }
                }
            }
            BeginTrans();
            var up     = DB.NewDBUnitParameter();
            var p_list = (from t in DB.LamdaTable(up, "EXTEND_EVENTS", "a")
                          where t.EventCategory == "System"
                          select t).GetQueryList(up);
            var exists_list = (from t in DB.LamdaTable(up, "EXTEND_EVENTS", "a")
                               where t.EventCategory == "Customerize"
                               select new { t.EventNo }).GetQueryList(up);
            var allow_p_nos = p_list.Select(d => ComFunc.nvl(d.GetValue("EventNo"))).ToArray();
            var exists_nos  = exists_list.Select(d => ComFunc.nvl(d.GetValue("EventNo"))).ToArray();

            foreach (dynamic item in datalist)
            {
                if (ComFunc.nvl(item.parent) != "" && !allow_p_nos.Contains((string)item.parent))
                {
                    return(new
                    {
                        code = "failed",
                        msg = $"{item.no}该编号的父事件不被支持"
                    });
                }
                if (exists_nos.Contains((string)item.no))
                {
                    return(new
                    {
                        code = "failed",
                        msg = $"{item.no}该编号的事件已存在"
                    });
                }
            }

            foreach (dynamic item in datalist)
            {
                item.add_id    = TokenPayLoad.ID;
                item.add_ip    = ClientInfo.IP;
                item.add_name  = ComFunc.nvl(TokenPayLoad["username"]);
                item.add_time  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                item.last_id   = ClientInfo.IP;
                item.last_ip   = ComFunc.nvl(TokenPayLoad["username"]);
                item.last_name = TokenPayLoad.ID;
                item.last_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                DB.QuickInsert(up, "EXTEND_EVENTS", new
                {
                    EventNo         = item.no,
                    EventName       = item.name,
                    EventCategory   = "Customerize",
                    EventType       = item.type,
                    EventAt         = item.at,
                    ParentEventNo   = item.parent,
                    EventDesc       = item.desc,
                    EventParameters = item.request_parameters,
                    add_id          = TokenPayLoad.ID,
                    add_ip          = ClientInfo.IP,
                    add_name        = ComFunc.nvl(TokenPayLoad["username"]),
                    add_time        = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    last_id         = ClientInfo.IP,
                    last_ip         = ComFunc.nvl(TokenPayLoad["username"]),
                    last_name       = TokenPayLoad.ID,
                    last_time       = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                });
            }

            CommitTrans();
            return(new
            {
                code = "success",
                msg = "操作成功"
            });
        }
        /// <summary>
        /// 执行事件
        /// </summary>
        /// <param name="up"></param>
        /// <param name="id"></param>
        /// <param name="this_data"></param>
        /// <returns></returns>
        private object DoCallEvent(UnitParameter up, string id, object this_data)
        {
            var list = (from t in DB.LamdaTable(up, "EXTEND_EVENTS", "a")
                        where t.EventNo == id
                        select new
            {
                no = t.EventNo,
                name = t.EventName,
                category = t.EventCategory,
                type = t.EventType,
                at = t.EventAt,
                parent = t.
                         desc = t.EventDesc,
                parameters = t.EventParameters
            }).GetQueryList(up);

            if (list.Count <= 0)
            {
                return(new
                {
                    code = "failed",
                    msg = "执行失败:事件设定不存在"
                });
            }
            dynamic info       = list.First();
            var     event_call = new EventsCall();
            var     parameters = FrameDLRObject.IsJsonThen(info.parameters, null, FrameDLRFlags.SensitiveCase);

            if (parameters == null)
            {
                return(new
                {
                    code = "failed",
                    msg = "执行失败:确少执行参数"
                });
            }
            string         url          = ComFunc.nvl(parameters.RequestUrl);
            string         method       = ComFunc.nvl(parameters.RequestMethod);
            FrameDLRObject query_string = ComFunc.nvl(parameters.RequestQueryString) == "" ? null : parameters.RequestQueryString;
            FrameDLRObject header       = ComFunc.nvl(parameters.RequestHeader) == "" ? null : parameters.RequestHeaders;
            FrameDLRObject post_data    = ComFunc.nvl(parameters.RequestPostData) == "" ? null : parameters.RequestPostData;
            var            call_context = new EventsCall.EventsCallContext();

            call_context.RowData    = ComFunc.Base64Code(FrameDLRObject.CreateInstance(this_data, FrameDLRFlags.SensitiveCase).tojsonstring());
            call_context.Login_ID   = TokenPayLoad.ID;
            call_context.Login_Name = ComFunc.nvl(TokenPayLoad["username"]);
            if (url.StartsWith("~"))
            {
                return(CallLocalLogic(url.Replace("~", ""), method, header, query_string, post_data));
            }
            else
            {
                if (query_string != null)
                {
                    var qs = "";
                    foreach (var item in query_string.Items)
                    {
                        qs += $"{item.Key}={ComFunc.UrlEncode(item.Value)}&";
                    }
                    qs = qs.Length > 0 ? qs.Substring(0, qs.Length - 1) : "";
                    if (url.IndexOf("?") > 0)
                    {
                        url += $"&{qs}";
                    }
                    else
                    {
                        url += $"?{qs}";
                    }
                }
                string result = event_call.Send(url, method, call_context, header, post_data);
                if (result == null)
                {
                    return(new
                    {
                        code = "failed",
                        msg = "执行失败:返回结果为空"
                    });
                }
                else if (result.StartsWith("Failed:"))
                {
                    return(new
                    {
                        code = "failed",
                        msg = $"执行失败:{result}"
                    });
                }
                else
                {
                    return(FrameDLRObject.IsJsonThen(result, null, FrameDLRFlags.SensitiveCase));
                }
            }
        }
        /// <summary>
        /// 解析表达式
        /// </summary>
        /// <param name="express"></param>
        /// <returns></returns>
        public RefExpressResult ParseExpress(string express)
        {
            var rtn = new RefExpressResult();

            if (string.IsNullOrEmpty(express))
            {
                return(rtn);
            }

            var jsonitem = FrameDLRObject.IsJsonThen(express, null, FrameDLRFlags.SensitiveCase);

            if (jsonitem != null)
            {
                rtn.TableName = ComFunc.nvl(jsonitem.GetValue("$ref_table"));
                rtn.KeyColumn = ComFunc.nvl(jsonitem.GetValue("$ref_key_column"));
                var show = jsonitem.GetValue("$show");
                if (show != null && show is IEnumerable <object> )
                {
                    rtn.ShowColumns.AddRange(((IEnumerable <object>)show).Select(d => (string)ComFunc.nvl(d)));
                }
                var where = jsonitem.GetValue("$where");
                if (where != null && where is FrameDLRObject)
                {
                    var wobj = (FrameDLRObject) where;
                    foreach (var item in wobj.Items)
                    {
                        var op = (FrameDLRObject)item.Value;
                        rtn.Filter.Add(item.Key, new FilterEntity(op.Items[0].Key, ComFunc.nvl(op.Items[0].Value)));
                    }
                }
            }
            else
            {
                var arr = express.Split("->");
                if (arr.Length < 2)
                {
                    return(null);
                }

                var re_table = new Regex(@"[A-Za-z0-9_.,]+(?=\[)");
                var re_w     = new Regex(@"(?<=\[)[A-Za-z0-9_=><:,@]+(?=\])");

                var ref1     = arr[0];
                var show_ref = arr[1];


                var w_str      = re_w.Match(ref1).Value;
                var table_str  = w_str != "" ? re_table.Match(ref1).Value : ref1;
                var table_strs = table_str.Split('.', StringSplitOptions.RemoveEmptyEntries);
                var table_ref  = table_strs[0];
                var col_ref    = table_strs.Length > 1 ? table_strs[1] : "";

                rtn.TableName = table_ref;
                rtn.KeyColumn = col_ref;

                foreach (var s in show_ref.Split(",", StringSplitOptions.RemoveEmptyEntries))
                {
                    rtn.ShowColumns.Add(s);
                }

                foreach (var w in w_str.Split(",", StringSplitOptions.RemoveEmptyEntries))
                {
                    var w_strs   = w.Split(new string[] { ":", "=", ">", ">=", "<", "<=" }, StringSplitOptions.RemoveEmptyEntries);
                    var w_column = w_strs.ElementAt(0);
                    var w_value  = w_strs.ElementAt(1);
                    var w_op     = w.Replace(w_column, "").Replace(w_value, "");

                    rtn.Filter.Add(w_column, new FilterEntity(w_op, w_value));
                }
            }

            return(rtn);
        }