1. <%-- builed by manage.aspx.cmt [ver:2014.19.01] at 2014-12-01 16:19:20 --%> <%@ Page Language="C#" AutoEventWireup="True" CodeBehind="BasLimitConfigManage.aspx.cs" Inherits="HraWeb.BasLimitConfigManage" %> <%@ Register Assembly="Trirand.Web" TagPrefix="asp" Namespace="Trirand.Web.UI.WebControls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <link href="../assets/css/vendor/BootstrapSelect/bootstrap-select.css" rel="stylesheet" /> <script src="../assets/js/vendor/BootstrapSelect/bootstrap-select.js"></script> <script src="../assets/js/vendor/BootstrapSelect/defaults-zh_CN.js"></script> <link href="../assets/css/vendor/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="../assets/css/vendor/jsMind/jsmind.css" rel="stylesheet" /> <style type="text/css"> jmnode.selected { background-color: #428bca; color: #fff; border: solid 0px #CCCCCC; box-shadow: 2px 2px 8px #000; } jmnode { border: solid 1px #CCCCCC; } </style> </head> <body> <div id="jsmind_container" style="height: 800px"></div> <div class="modal fade" id="setModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document" style=" 630px"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">添加限额</h4> </div> <div class="modal-body"> <form class="form-horizontal"> <div class="form-group"> <label for="txt_EffectiveDate_" class="col-md-2 control-label">有效期开始</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_EffectiveDate_" placeholder="xxxx/xx/xx"> </div> <label for="txt_TerminateDate_" class="col-md-2 control-label">有效期结束</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_TerminateDate_" placeholder="xxxx/xx/xx"> </div> </div> <div class="form-group"> <label for="txt_LowerLimitValue_" class="col-md-2 control-label">下限值</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_LowerLimitValue_" placeholder="数值"> </div> <label for="txt_YellowLimitValue_" class="col-md-2 control-label">黄线值</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_YellowLimitValue_" placeholder="数值"> </div> </div> <div class="form-group"> <label for="txt_RedLimitValue_" class="col-md-2 control-label">红线值</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_RedLimitValue_" placeholder="数值"> </div> <label for="txt_UpperLimitValue_" class="col-md-2 control-label">黄线值</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_UpperLimitValue_" placeholder="数值"> </div> </div> <div class="form-group"> <label for="txt_LimitControlFreq_" class="col-md-2 control-label">检查频次</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_LimitControlFreq_" placeholder="请选择"> </div> <label for="txt_LimitBundleName_" class="col-md-2 control-label">限额名称</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_LimitBundleName_" placeholder="限额名称"> </div> </div> <div class="form-group"> <label for="txt_EndUser_" class="col-md-2 control-label">使用机构</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_EndUser_" placeholder="请选择"> </div> <label for="txt_LimitUnit_" class="col-md-2 control-label">单位</label> <div class="col-md-4"> <input type="text" class="form-control" id="txt_LimitUnit_" placeholder="限额名称"> </div> </div> <div class="form-group"> <label for="currency" class="col-md-2 control-label">币种</label> <div class="col-md-4"> <input type="text" class="form-control" id="currency" placeholder="请选择"> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">确定</button> </div> </div> </div> </div> <!-- myModal --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">限额详情</h4> </div> <div class="modal-body table-responsive"> <table class="table table-hover table-striped"> <tr> <td>限额内容 </td> <td>黄线值 </td> <td>红线值 </td> <td>上限值 </td> <td>额度使用量 </td> </tr> <tr> <td>单笔交易限额 </td> <td>10000 </td> <td>50000 </td> <td>100000 </td> <td>-- </td> </tr> <tr> <td>单笔交易限额 </td> <td>10000 </td> <td>50000 </td> <td>100000 </td> <td>-- </td> </tr> </table> <div class="text-center"> <ul class="pagination"> <li><a href="#">«</a></li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">»</a></li> </ul> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">确定</button> </div> </div> </div> </div> <!--newModal--> <div class="modal fade " id="newModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content" style=" 400px"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title">添加限额</h4> </div> <div class="modal-body " style="min-height: 310px; max-height: 600px; overflow: auto"> <form class="form-inline"> <div class="form-group" style="display: block"> <label for="limitObectType" class="col-md-5 control-label" style="line-height: 34px">限额对象类型</label> <div class=" col-md-7"> <select id="limitObectType" class="selectpicker show-tick form-control"> </select> </div> </div> <div class="form-group col-md-offset-1" style="display: block"> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel"> <div class="panel-b-body" id="left" style="padding: 0; overflow: auto; 100%"> <ul id="tt1" style="" class="easyui-tree"></ul> </div> </div> </div> </form> <div class="panel-b panel-b-archon main-graph"> <div class="col-xs-6 col-sm-4"> <div class="form-group"> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> <button type="button" id="btn_new" class="btn btn-primary">保存</button> </div> </div> </div> </div> <!--editModal--> <div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title">编辑限额</h4> </div> <div class="modal-body"> <form class="form-inline"> <div class="form-group"> <label for="exampleInputEmail3">限额对象</label> <input type="email" class="form-control" id="d2" placeholder="Email"> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> <button type="button" id="btn_edit" class="btn btn-primary">保存</button> </div> </div> </div> </div> <!--delModal--> <div class="modal fade bs-example-modal-sm" id="delModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title">删除</h4> </div> <div class="modal-body"> 确定要删除此节点吗? </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" id="btn_del" class="btn btn-danger">删除</button> </div> </div> </div> </div> <script src="../assets/js/vendor/jsMind/jsmind.js"></script> <script src="../assets/js/vendor/bootstrapMenu/BootstrapMenu.js"></script> <script src="../assets/js/vendor/bootstrap/bootstrap.min.js"></script> <script type="text/javascript"> function filterDrp(obj, nodeType, nodeId, callback) { var url = '/Bas/BasLimitConfigManage.aspx?_method=entity&type=' + nodeType; $.post(url, function (data) { obj.find("option").remove(); obj.append(data); obj.selectpicker('refresh'); LoadTree1(obj.val(), nodeId, nodeType); }); if (callback) { callback(); } } //树节点的id var nodeId = ''; //树节点的name var nodeName = ''; var selectedNodeId = ''; var selectedNodeType = ''; function LoadTree1(type, nodeId, nodeType) { var nodeId1 = jm.get_selected_node().id; var alertType = $("#limitObectType option:selected").val(); var noalertType = jm.get_selected_node().data.type; //alert("nodeid=" + nodeId1); //alert("nt=" + noalertType); //alert("alertype=" + alertType); var postJson = [noalertType]; //var postJson = ["Limit_Object_BusiStruc", "Limit_Object_BasProductGroup", "Limit_Object_BasCurrency"]; postJson = JSON.stringify(postJson); DataGrid.WaitMessage(); $("#tt1").tree( { url: '/BAS/LimiManagetTree/TraderLimitTreeJson.ashx?_method=GetTradeLimitBusiStrucTree&_id=0&a=' + Math.random() + "&postJson=" + postJson + "&nodeId=" + nodeId1 + "&alertnodeType=" + alertType, method: 'get', animate: true, formatter: function (node) { var s = node.text; if (node.children) { s += " <span style='color:blue'>(" + node.children.length + ")</span>"; } return s; }, onBeforeExpand: function (node, param) { var url = "/BAS/BasLimitBusiStrucManage.aspx?_method=loadChild&child=" + node.id; $('#tt1').tree('options').url = url; }, onClick: function (node) { nodeId = node.id; nodeName = node.text; // $("#jq").jqGrid("setGridParam", { postData: { txt_Name_LK_: $("#txt_Name_LK_").val(), "BaslimitBusinessStruPId": node.id} }).trigger("reloadGrid"); }, onLoadSuccess: function (node, data) { DataGrid.RemoveWaitMessage(); if (data.error!=undefined &&data.error == "-999") { $.messager.alert("操作提示", data.message, "error"); return false; } $('#newModal').modal('show'); } } ); // off_id = $("#tt").selectNode.txt_OfficeId_; } var jm; $(function () { //UTIL.SetDropdownListForBootStrapByParentCode($("#limitObectType"), "Rsk_Limit_Object_Type"); $("#limitObectType").change(function () { var type = $(this).find("option:checked").attr("value"); LoadTree1(type, selectedNodeId, selectedNodeType); }); jm = load_jsmind(); //---------------------------------------------------------------------------------------------------------------- var menu = new BootstrapMenu('jmnode', { actions: [{ name: '添加子节点', onClick: function () { selectedNodeType = jm.get_selected_node().data.type; selectedNodeId = jm.get_selected_node().id; filterDrp($("#limitObectType"), selectedNodeType, selectedNodeId, null); } }, { name: '编辑此节点', onClick: function () { $('#editModal').modal('show'); } }, { name: '删除此节点', onClick: function () { $('#delModal').modal('show'); } }, { name: '添加限额', onClick: function () { $('#setModal').modal('show'); } }, { name: '查看限额设置', onClick: function () { $('#myModal').modal('show'); } }] }); $("#btn_del").click(function () { var nodeSelected = jm.get_selected_node(); $('#delModal').modal('hide'); jm.enable_edit(); jm.remove_node(nodeSelected); jm.disable_edit(); }); $("#btn_edit").click(function () { var nodeSelected = jm.get_selected_node(); $('#editModal').modal('hide'); jm.enable_edit(); jm.begin_edit(nodeSelected); $('.jsmind-editor').val($("#drp1 option:selected").text()); jm.end_edit(); jm.disable_edit(); }); $("#btn_new").click(function () { URL = ''; $('#newModal').modal('hide'); $.post(url, function (data) { if (data == '1') { var nodeSelected = jm.get_selected_node(); alert($("#limitObectType option:selected").val()); jm.enable_edit(); jm.add_node(nodeSelected, nodeId, nodeName, { type: $("#limitObectType").val() }); jm.end_edit(); jm.disable_edit(); } else { } }); }); }); function load_jsmind() { DataGrid.WaitMessage(""); //alert(21); var postJson = ["Limit_Object_BusiStruc", "Limit_Object_BasProductGroup", "Limit_Object_RskFactor", "Limit_Object_BasCurrency", "Limit_Object_BasCounterparty", "Limit_Object_BasPortfolio", "Credit_Rate"]; postJson = JSON.stringify(postJson); var datas = []; var url = '/BAS/LimiManagetTree/TraderLimitTreeJson.ashx?_method=GetTradeLimitBusiStrucTree' + '&postJson=' + postJson + "&isConvert=true"; $.post(url, function (data) { DataGrid.RemoveWaitMessage(); datas = JSON.parse(data); var mind = { "meta": { "name": "demo", "author": "hizzgdev@163.com", "version": "0.2" }, "format": "node_array", "data": datas }; var options = { // options 将在下一章中详细介绍 container: 'jsmind_container', // [必选] 容器的ID editable: false, // [可选] 是否启用编辑 theme: 'default', // [可选] 主题 mode: 'side' }; var jm1 = new jsMind(options); jm1.show(mind); jm = jm1; }); ; } </script> </body> </html> 2.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using HraWeb.Common; using WebApp.Common; using Contract.Domain; using System.Collections; namespace HraWeb { public partial class BasLimitConfigManage : JQEntityManage<Contract.Domain.BasLimitConfig> { protected override void Page_Load(object sender, EventArgs e) { if (Request["_method"] == "entity") { string type = Request["type"]; Response.Write(Psvc.TypeFilter(type)); Response.End(); } if (Request["_method"] == "addNode") { string nodeType = Request["nodeType"]; string nodeId = Request["nodeId"]; string selectedNodeId = Request["selectedNodeId"]; string selectedNodeType = Request["selectedNodeType"]; IList<RskLimitObject> list = Psvc.AddNode(nodeId, nodeType, selectedNodeId, selectedNodeType); Response.Write(""); Response.End(); } base.Page_Load(sender, e); } /// <summary> /// 设置查询条件或者语句 /// </summary> /// <returns></returns> protected override Framework.QueryInfo SetInfo() { info = base.SetInfo(); return info; } /// <summary> /// 初始化页面控件 /// </summary> protected override void InitPage() { base.InitPage(); // BindDrop(drp_Unit, "SPSW", true); } private Contract.IService.IBasLimitConfigService psvc; /// <summary> /// 初始化 /// </summary> Contract.IService.IBasLimitConfigService Psvc { get { if (psvc == null) { psvc = ctx.GetObject("BasLimitConfigService") as Contract.IService.IBasLimitConfigService; } return psvc; } } } public class jsMindEntity { public string id { get; set; } public bool isroot { get; set; } public string topic { get; set; } public string type { get; set; } public string parentid { get; set; } } } 3.traderlimitjson.ashx.cs using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using Contract.Domain; using DevExpress.Data.PLinq.Helpers; using Framework; using WebApp.Common; using Contract.Domain.Enum.EnumList; using BASBLL.BasLimitLayer.BasLimitBusiStrucLayer; using HRAModel.Sys.Enum; using Holworth.Utility; using Contract.Domain.Enum.EnumCommon; namespace HraWeb.Common { /// <summary> /// 业务结构选择类型 /// </summary> public enum BusiStrucEnum { BasLimitBusiStruc = -1, BasEnterprice = 0, BasLegalEntity = 1, BasBusinessUnit = 2, BasTradeDesk = 3, BasPortfolio = 4, User = 5 } /// <summary> /// EntityJsonList 的摘要说明 /// </summary> public class TraderLimitTreeJson : BasePage, IHttpHandler, System.Web.SessionState.IRequiresSessionState { /// <summary> /// 根据条件过滤busistruc /// </summary> /// <param name="where"></param> /// <returns></returns> private IList<BasLimitBusiStruc> loadBusiStruc(string where) { QueryInfo info = new QueryInfo(); if (string.IsNullOrEmpty(where)) { if (!string.IsNullOrEmpty(where)) { info.Where.Add("where1", where); } } info.QueryObject = "BasLimitBusiStruc"; var busiList = Dao.FindList<BasLimitBusiStruc>(info); return busiList; } private EasyUiTree loadBusiTree(string nodeId, EasyUiTree node, string where) { var busiList = loadBusiStruc(where); var trees = BusiList2Tree(busiList, null, null); foreach (var item in trees) { node.children.Add(item); } return node; } private IList<EasyUiTree> BusiList2Tree(IList<BasLimitBusiStruc> busiList, BasLimitBusiStruc bb, EasyUiTree ee, bool isfirst = true) { EasyUiTree e1 = null; IList<EasyUiTree> nodes = new List<EasyUiTree>(); IList<BasLimitBusiStruc> tmpList = null; if (bb.Children.Count > 0) { tmpList = bb.Children; } else { tmpList = busiList; } foreach (var b1 in tmpList) { e1 = new EasyUiTree(); e1.id = b1.Id; e1.text = b1.Name; e1.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc }; if (b1.Children.Count > 0) { if (e1.children == null) { e1.children = new List<EasyUiTree>(); } BusiList2Tree(busiList, b1, e1, false); } if (isfirst) //node.children.Add(e1); nodes.Add(e1); else { ee.children.Add(e1); } } return nodes; } private void LoadSelNodeTypeEasyuiTree(Limit_Object limitObject, EasyUiTree node, string nodeId, string where) { EasyUiTree e; var currNode = new EasyUiTree(); currNode.children = new List<EasyUiTree>(); switch (limitObject) { case Limit_Object.Limit_Object_BusiStruc: #region 业务结构 BusiStrucEnum strucEnum = 0; var busiInfo = new QueryInfo("BasLimitBusiStruc"); busiInfo.AddParam("Id", nodeId); var busi = Dao.FindOne(busiInfo) as BasLimitBusiStruc; if (busi == null) { throw new Exception("节点不存在,或者节点已经被移除!"); } if (busi.NodeSource == "User") { //Utility.JSUtil.ExecuteScript(string.Format(" $.messager.alert('操作提示', '{0}', '{1}')", "用户级没有子节点", "warning")); //return; var obj = new { error = -999, message = "用户级没有子节点" }; Context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(obj)); Context.Response.End(); } currNode.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc }; //currNode.id = nodeId; //currNode.text = busi.Name; if (busi.ProLevel == 1) { strucEnum = BusiStrucEnum.BasLegalEntity; } if (busi.ProLevel == 2) { strucEnum = BusiStrucEnum.BasBusinessUnit; } if (busi.ProLevel == 3) { strucEnum = BusiStrucEnum.BasTradeDesk; } if (busi.ProLevel == 4) { strucEnum = BusiStrucEnum.BasPortfolio; } if (busi.ProLevel == 5) { strucEnum = BusiStrucEnum.User; } switch (strucEnum) { case BusiStrucEnum.BasLimitBusiStruc: loadBusiTree(nodeId, node, where); break; case BusiStrucEnum.BasEnterprice: break; case BusiStrucEnum.BasLegalEntity: currNode.id = ((int)BusiStrucEnum.BasLegalEntity).ToString(); currNode.text = "法人实体"; var entitylist = Dao.FindList<BasLegalEntity>(new QueryInfo("BasLegalEntity")); foreach (var item in entitylist) { e = new EasyUiTree(); e.id = item.Id; e.text = item.LegalEntityName; currNode.children.Add(e); } break; case BusiStrucEnum.BasBusinessUnit: currNode.id = ((int)BusiStrucEnum.BasBusinessUnit).ToString(); currNode.text = "业务单位"; var unitList = Dao.FindList<BasBusinessUnit>(new QueryInfo("BasBusinessUnit")); foreach (var item in unitList) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc, Ori = new { RefTableName = "BasBusinessUnit", DataValueField = "Id", TextValueField = "BusinessUnitName", } }; e.id = item.Id; e.text = item.BusinessUnitName; currNode.children.Add(e); } break; case BusiStrucEnum.BasTradeDesk: currNode.id = ((int)BusiStrucEnum.BasTradeDesk).ToString(); currNode.text = "交易前台"; var traderDeskList = Dao.FindList<BasTradeDesk>(new QueryInfo("BasTradeDesk")); foreach (var item in traderDeskList) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc, Ori = new { RefTableName = "BasTradeDesk", DataValueField = "Id", TextValueField = "TradeDeskName", } }; e.id = item.Id; e.text = item.TradeDeskName; currNode.children.Add(e); } break; case BusiStrucEnum.BasPortfolio: currNode.id = ((int)BusiStrucEnum.BasPortfolio).ToString(); currNode.text = "投资组合"; var portfolioList = Dao.FindList<BasPortfolio>(new QueryInfo("BasPortfolio")); foreach (var item in portfolioList) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc, Ori = new { RefTableName = "BasPortfolio", DataValueField = "Id", TextValueField = "PortfolioName", } }; e.id = item.Id; e.text = item.PortfolioName; currNode.children.Add(e); } break; case BusiStrucEnum.User: currNode.id = ((int)BusiStrucEnum.User).ToString(); currNode.text = "交易员"; var userList = Dao.FindList<User>(new QueryInfo("User")); foreach (var item in userList) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc, Ori = new { RefTableName = "User", DataValueField = "Id", TextValueField = "Name", } }; e.id = item.Id; e.text = item.Name; currNode.children.Add(e); } break; default: break; } #endregion break; //case Limit_Object.Limit_Object_BasProductGroup: // #region 产品群 // #endregion // break; case Limit_Object.Limit_Object_RskFactor: #region 风险因子 var rskfactorInfo = new QueryInfo("RskFactor"); rskfactorInfo.AddParam("Id", nodeId); var currfactor = Dao.FindOne(rskfactorInfo) as RskFactor; if (currfactor != null) { var obj = new { error = -999, message = "不能添加子节点,已经属于叶子节点" }; Context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(obj)); Context.Response.End(); } currNode.id = ((int)EnumComon.RskFactor).ToString(); currNode.text = "风险因子"; var factorList = Dao.FindList<RskFactor>(new QueryInfo("RskFactor")); foreach (var item in factorList) { e = new EasyUiTree(); e.attributes = new { RefTableName = "RskFactor", DataValueField = "Id", TextValueField = "RiskFactorName", LimitObjectType = (int)Limit_Object.Limit_Object_RskFactor, }; e.id = item.Id; e.text = item.RiskFactorName; currNode.children.Add(e); } #endregion break; case Limit_Object.Limit_Object_BasCurrency: #region 币种 var currenyInfo = new QueryInfo("BasCurrency"); currenyInfo.AddParam("Id", nodeId); var curreny = Dao.FindOne(currenyInfo) as BasCurrency; if (curreny != null) { var obj = new { error = -999, message = "不能添加子节点,已经属于叶子节点" }; Context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(obj)); Context.Response.End(); } currNode.id = ((int)EnumComon.BasCurrency).ToString(); currNode.text = "币种"; var currencys = Dao.FindList<BasCurrency>(new QueryInfo("BasCurrency")); foreach (var item in currencys) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasCurrency", DataValueField = "Id", TextValueField = "CurrencyName", LimitObjectType = (int)Limit_Object.Limit_Object_BasCurrency, }; e.id = item.Id; e.text = item.CurrencyName; currNode.children.Add(e); } #endregion break; case Limit_Object.Limit_Object_BasCounterparty: #region 交易对手 var partyInfo = new QueryInfo("BasCounterparty"); partyInfo.AddParam("Id", nodeId); var party = Dao.FindOne(partyInfo) as BasCounterparty; if (party != null) { var obj = new { error = -999, message = "不能添加子节点,已经属于叶子节点" }; Context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(obj)); Context.Response.End(); } currNode.id = ((int)EnumComon.BasCounterparty).ToString(); currNode.text = "交易对手"; var partys = Dao.FindList<BasCounterparty>(new QueryInfo("BasCounterparty")); foreach (var item in partys) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasCounterparty", DataValueField = "Id", TextValueField = "CounterpartyName", LimitObjectType = (int)Limit_Object.Limit_Object_BasCounterparty, }; e.id = item.Id; e.text = item.CounterpartyName; currNode.children.Add(e); } #endregion break; case Limit_Object.Limit_Object_BasPortfolio: #region 投资组合 var portfolioInfo = new QueryInfo("BasPortfolio"); portfolioInfo.AddParam("Id", nodeId); var portfolio = Dao.FindOne(portfolioInfo) as BasPortfolio; if (portfolio != null) { var obj = new { error = -999, message = "不能添加子节点,已经属于叶子节点" }; Context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(obj)); Context.Response.End(); } currNode.id = ((int)EnumComon.BasPortfolio).ToString(); currNode.text = "投资组合"; var portfolios = Dao.FindList<BasPortfolio>(new QueryInfo("BasPortfolio")); foreach (var item in portfolios) { e = new EasyUiTree(); e.attributes = new { RefTableName = "BasPortfolio", DataValueField = "Id", TextValueField = "PortfolioName", LimitObjectType = (int)Limit_Object.Limit_Object_BasPortfolio, }; e.id = item.Id; e.text = item.PortfolioName; currNode.children.Add(e); } #endregion break; case Limit_Object.Credit_Rate: #region 信用等级 #endregion break; default: break; } node.children.Add(currNode); } private IBasLimitBusiStrucLayerService _basLimitBusiStrucLayerService; public IBasLimitBusiStrucLayerService BasLimitBusiStrucLayerService { get { if (_basLimitBusiStrucLayerService == null) { _basLimitBusiStrucLayerService = ctx["BasLimitBusiStrucLayerService"] as IBasLimitBusiStrucLayerService; } return _basLimitBusiStrucLayerService; } } /// <summary> /// 通过限额对象,检测是否加载该指标类型 /// </summary> /// <param name="limitObject"></param> /// <returns></returns> private bool checkLimitIndexTypeisLoad(Limit_Index_Type limitIndexType, object limitObject) { bool ispass = true; if (limitObject == null || limitObject.ToString() == "") { return true; } switch (int.Parse(limitObject.ToString())) { case (int)Limit_Object.Limit_Object_BusiStruc: ispass = true; break; case (int)Limit_Object.Limit_Object_BasProductGroup: ispass = true; break; case (int)Limit_Object.Limit_Object_RskFactor: ispass = true; break; case (int)Limit_Object.Limit_Object_BasCurrency: switch (limitIndexType) { case Limit_Index_Type.Limit_Index_Type_Trade_Quantity: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Trade_Amount: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Cash_Outflow: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Value_At_Risk: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Loss: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Credit_Rating: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Credit_Line: ispass = false; break; case Limit_Index_Type.Limit_Index_Type_Tenor: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Sensitivity: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_CutLoss: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_TakeProfit: ispass = true; break; } break; case (int)Limit_Object.Limit_Object_BasCounterparty: ispass = true; break; case (int)Limit_Object.Limit_Object_BasPortfolio: ispass = true; break; case (int)EnumComon.BasLimitProStruc: break; case (int)EnumComon.BasLimitBusiStruc: ispass = true; break; case (int)EnumComon.BasProductGroup: ispass = true; break; case (int)EnumComon.RskFactor: ispass = true; break; case (int)EnumComon.BasCurrency: switch (limitIndexType) { case Limit_Index_Type.Limit_Index_Type_Trade_Quantity: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Trade_Amount: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Cash_Outflow: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Value_At_Risk: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Loss: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Credit_Rating: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Credit_Line: ispass = false; break; case Limit_Index_Type.Limit_Index_Type_Tenor: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_Sensitivity: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_CutLoss: ispass = true; break; case Limit_Index_Type.Limit_Index_Type_TakeProfit: ispass = true; break; default: break; } break; case (int)EnumComon.BasCounterparty: ispass = true; break; case (int)EnumComon.BasPortfolio: ispass = true; break; } return ispass; } public void ProcessRequest(HttpContext context) { var isConvert = context.Request["isConvert"] ?? ""; context.Response.ContentType = "text/plain"; context.Response.Cache.SetCacheability(HttpCacheability.NoCache); var alertType = context.Request["alertnodeType"] ?? ""; var nodeId = context.Request["nodeId"] ?? ""; var csEnumList = EnumUtil.GetEnumDataSource<Inst_Type>(); switch (context.Request["_method"]) { #region 交易限额 限额对象 case "GetTradeLimitBusiStrucTree": List<string> postJson = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(context.Request["postJson"]); #region 业务结构 EasyUiTree node = new EasyUiTree(); node.text = EnumComon.BasLimitBusiStruc.GetEnumDefaultName().ToString(); node.id = ((int)EnumComon.BasLimitBusiStruc).ToString(); node.attributes = new { LimitObjectType = (int)EnumComon.BasLimitBusiStruc }; node.children = new List<EasyUiTree>(); #endregion IList<EasyUiTree> list = new List<EasyUiTree>(); list.Add(node); EasyUiTree rskFactorTree = new EasyUiTree(); EasyUiTree basCurrencyTree = new EasyUiTree(); EasyUiTree basCounterpartyTree = new EasyUiTree(); EasyUiTree basProductGroupTree = new EasyUiTree(); EasyUiTree basPortfolioTree = new EasyUiTree(); IList<EasyUiTree> busiTreeList = TreeJSON.LoadEntityTree("ID", "BAS_LIMIT_BUSI_STRUC", "", "PARENT_ID", "NAME", ""); if (postJson.Contains(Limit_Object.Limit_Object_BusiStruc.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_BusiStruc).ToString()) || postJson.Contains(((int)EnumComon.BasLimitBusiStruc).ToString()) ) { #region 业务结构 if (string.IsNullOrEmpty(nodeId)) { foreach (EasyUiTree e1 in busiTreeList) { e1.attributes = new { RefTableName = "BasLimitBusiStruc", DataValueField = "Id", TextValueField = "Name", LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc }; if (e1.children.Count > 0) { SetEasyUiTreeTag1(e1.children, "BasLimitBusiStruc", "Id", "Name", (int)Limit_Object.Limit_Object_BusiStruc, nodeId); } node.children.Add(e1); } } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_BusiStruc, node, nodeId, ""); } #endregion } if (postJson.Contains(Limit_Object.Limit_Object_RskFactor.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_RskFactor).ToString()) || postJson.Contains(((int)EnumComon.RskFactor).ToString())) { if (string.IsNullOrEmpty(nodeId)) { #region 风险因子 rskFactorTree.id = ((int)Limit_Object.Limit_Object_RskFactor).ToString(); rskFactorTree.text = Limit_Object.Limit_Object_RskFactor.GetEnumDefaultName().ToString(); rskFactorTree.attributes = new { LimitObjectType = (int)EnumComon.RskFactor }; rskFactorTree.children = new List<EasyUiTree>(); var factorTreeList = Holworth.Utility.HraUtility.ListToT<RskFactor>(Dao.FindList(new QueryInfo("RskFactor"))).ToList(); if (factorTreeList.Count > 0) { rskFactorTree.state = "closed"; } foreach (RskFactor r in factorTreeList) { EasyUiTree n = new EasyUiTree(); n.id = r.Id; n.text = r.RiskFactorName; n.attributes = new { RefTableName = "RskFactor", DataValueField = "Id", TextValueField = "RiskFactorName", LimitObjectType = (int)Limit_Object.Limit_Object_RskFactor }; rskFactorTree.children.Add(n); } node.children.Add(rskFactorTree); #endregion } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_RskFactor, node, nodeId, ""); } } if (postJson.Contains(Limit_Object.Limit_Object_BasCurrency.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_BasCurrency).ToString()) || postJson.Contains(((int)EnumComon.BasCurrency).ToString())) { if (string.IsNullOrEmpty(nodeId)) { #region 币种 basCurrencyTree.id = ((int)Limit_Object.Limit_Object_BasCurrency).ToString(); basCurrencyTree.text = Limit_Object.Limit_Object_BasCurrency.GetEnumDefaultName().ToString(); basCurrencyTree.attributes = new { LimitObjectType = (int)EnumComon.BasCurrency }; basCurrencyTree.children = new List<EasyUiTree>(); var basCurrencyTreeList = Holworth.Utility.HraUtility.ListToT<BasCurrency>(Dao.FindList(new QueryInfo("BasCurrency"))).ToList(); if (basCurrencyTreeList.Count > 0) { basCurrencyTree.state = "closed"; } foreach (BasCurrency r in basCurrencyTreeList) { EasyUiTree n = new EasyUiTree(); n.id = r.Id; n.text = r.CurrencyName; n.attributes = new { RefTableName = "BasCurrency", DataValueField = "Id", TextValueField = "CurrencyName", LimitObjectType = (int)Limit_Object.Limit_Object_BasCurrency }; basCurrencyTree.children.Add(n); } node.children.Add(basCurrencyTree); #endregion } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_BasCurrency, node, nodeId, ""); } } if (postJson.Contains(Limit_Object.Limit_Object_BasCounterparty.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_BasCounterparty).ToString()) || postJson.Contains(((int)EnumComon.BasCounterparty).ToString())) { if (string.IsNullOrEmpty(nodeId)) { #region 交易对手 basCounterpartyTree.id = ((int)Limit_Object.Limit_Object_BasCounterparty).ToString(); basCounterpartyTree.text = Limit_Object.Limit_Object_BasCounterparty.GetEnumDefaultName().ToString(); basCounterpartyTree.attributes = new { LimitObjectType = (int)EnumComon.BasCounterparty }; basCounterpartyTree.children = new List<EasyUiTree>(); var basCounterpartyTreeList = Holworth.Utility.HraUtility.ListToT<BasCounterparty>(Dao.FindList(new QueryInfo("BasCounterparty"))).ToList(); if (basCounterpartyTreeList.Count > 0) { basCounterpartyTree.state = "closed"; } foreach (BasCounterparty r in basCounterpartyTreeList) { EasyUiTree n = new EasyUiTree(); n.id = r.Id; n.text = r.CounterpartyName; n.attributes = new { RefTableName = "BasCounterparty", DataValueField = "Id", TextValueField = "CounterpartyName", LimitObjectType = (int)Limit_Object.Limit_Object_BasCounterparty }; basCounterpartyTree.children.Add(n); } node.children.Add(basCounterpartyTree); #endregion } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_BasCounterparty, node, nodeId, ""); } } if (postJson.Contains(Limit_Object.Limit_Object_BasProductGroup.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_BasProductGroup).ToString()) || postJson.Contains(((int)EnumComon.BasProductGroup).ToString())) { if (string.IsNullOrEmpty(nodeId)) { #region 金融产品群 basProductGroupTree.id = ((int)Limit_Object.Limit_Object_BasProductGroup).ToString(); basProductGroupTree.text = Limit_Object.Limit_Object_BasProductGroup.GetEnumDefaultName(); basProductGroupTree.attributes = new { LimitObjectType = (int)EnumComon.BasProductGroup }; basProductGroupTree.children = new List<EasyUiTree>(); IList<EasyUiTree> basProductGroupTreeList = TreeJSON.LoadEntityTree("PRODUCT_GROUP_ID", "BAS_PRODUCT_GROUP", "", "PARENT_ID", "PRODUCT_GROUP_NAME", ""); if (basProductGroupTreeList.Count > 0) { basProductGroupTree.state = "closed"; } foreach (EasyUiTree e1 in basProductGroupTreeList) { e1.attributes = new { RefTableName = "BasProductGroup", DataValueField = "Id", TextValueField = "ProductGroupName", LimitObjectType = (int)Limit_Object.Limit_Object_BasProductGroup }; if (e1.children.Count > 0) { SetEasyUiTreeTag1(e1.children, "BasProductGroup", "Id", "ProductGroupName", (int)Limit_Object.Limit_Object_BasProductGroup); } basProductGroupTree.children.Add(e1); } node.children.Add(basProductGroupTree); #endregion } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_BasProductGroup, node, nodeId, ""); } } if (postJson.Contains(Limit_Object.Limit_Object_BasPortfolio.ToString()) || postJson.Contains(((int)Limit_Object.Limit_Object_BasPortfolio).ToString()) || postJson.Contains(((int)EnumComon.BasPortfolio).ToString())) { if (string.IsNullOrEmpty(nodeId)) { #region 投资组合 basPortfolioTree.id = ((int)Limit_Object.Limit_Object_BasPortfolio).ToString(); basPortfolioTree.text = Limit_Object.Limit_Object_BasPortfolio.GetEnumDefaultName().ToString(); basPortfolioTree.attributes = new { LimitObjectType = (int)EnumComon.BasPortfolio }; basPortfolioTree.children = new List<EasyUiTree>(); var basPortfolioTreeTreeList = Holworth.Utility.HraUtility.ListToT<BasPortfolio>(Dao.FindList(new QueryInfo("BasPortfolio"))).ToList(); if (basPortfolioTreeTreeList.Count > 0) { basPortfolioTree.state = "closed"; } foreach (BasPortfolio r in basPortfolioTreeTreeList) { EasyUiTree n = new EasyUiTree(); n.id = r.Id; n.text = r.PortfolioName; n.attributes = new { RefTableName = "BasPortfolio", DataValueField = "Id", TextValueField = "PortfolioName", LimitObjectType = (int)Limit_Object.Limit_Object_BasPortfolio }; basPortfolioTree.children.Add(n); } node.children.Add(basPortfolioTree); #endregion } else { LoadSelNodeTypeEasyuiTree(Limit_Object.Limit_Object_BasPortfolio, node, nodeId, ""); } } //list.Add(node); //list.Add(basProductGroupTree); //list.Add(rskFactorTree); //list.Add(basCurrencyTree); //list.Add(basCounterpartyTree); var json = Newtonsoft.Json.JsonConvert.SerializeObject(list); if (!string.IsNullOrEmpty(isConvert) && isConvert == "true") { IList<jsMindEntity> minds = new List<jsMindEntity>(); json = Convert2MindEntity(list, minds); } context.Response.Write(json); context.Response.End(); break; #endregion #region 交易限额 限额内容 case "GetTradeLimitProStrucTree": string reqlimitObject = context.Request["limitObject"]; Limit_Object selLimitObject = 0; if (!string.IsNullOrEmpty(reqlimitObject)) { selLimitObject = (Limit_Object)int.Parse(reqlimitObject); } int LimitType = int.Parse(context.Request["LimitType"]); QueryInfo basLimitTypeInfo = new QueryInfo(); basLimitTypeInfo.QueryObject = "BasLimitType"; var basLimitTypeList = Holworth.Utility.HraUtility.ListToT<BasLimitType>(Dao.FindList(basLimitTypeInfo)).ToList(); var typeList = basLimitTypeList.Where(x => ((int)x.LimitType) == LimitType).Select(x => x.LimitIndexType).Distinct(new LimitIndexTypeDistinct()).ToList(); IList<EasyUiTree> list1 = new List<EasyUiTree>(); EasyUiTree rootNode = new EasyUiTree(); rootNode.id = ((int)EnumComon.BasLimitProStruc).ToString(); rootNode.text = EnumComon.BasLimitProStruc.GetEnumDefaultName(); rootNode.attributes = new { LimitType = ((int)EnumComon.BasLimitProStruc).ToString() }; //加载指标 if (typeList.Count > 0) { //rootNode.state = "closed"; rootNode.children = new List<EasyUiTree>(); typeList.ForEach(t => { //判断限额指标类型是否属于选中的限额对象 if (checkLimitIndexTypeisLoad(t, reqlimitObject)) { EasyUiTree e2 = new EasyUiTree(); //id存的就是指标类型 e2.id = ((int)t).ToString(); //e2.attributes = "LimitIndexType"; e2.text = csEnumList.First(x => x.IntValue.ToString().Equals(e2.id)).DisplayValue; e2.attributes = new { LimitIndexType = t, LimitType = "" }; rootNode.children.Add(e2); } }); } //加载具体的限额类型 //(这里其实是个自关联) // (指标1 类型1) (指标1 类型2) if (rootNode.children != null && rootNode.children.Count > 0) { foreach (EasyUiTree child in rootNode.children) { foreach (var t in basLimitTypeList) { //按理说我们只要过滤指标类属不属于选定的限额对象就好了 这里正常都要返回true,因为这里的内容就是幸存的指标的具体类型比如 指标1 类型1 if (checkLimitIndexTypeisLoad(t.LimitIndexType, reqlimitObject)) { if (((int)t.LimitIndexType).ToString().Equals(child.id) && t.Id != child.id) { child.state = "closed"; if (child.children == null || child.children.Count <= 0) child.children = new List<EasyUiTree>(); EasyUiTree e3 = new EasyUiTree(); e3.id = t.Id; e3.text = t.LimitIndexName; e3.attributes = new { LimitType = (int)t.LimitType, LimitIndexType = t.LimitIndexType, }; child.children.Add(e3); } } } } } list1.Add(rootNode); var json2 = Newtonsoft.Json.JsonConvert.SerializeObject(list1); if (!string.IsNullOrEmpty(isConvert) && isConvert == "true") { IList<jsMindEntity> minds = new List<jsMindEntity>(); json2 = Convert2MindEntity(list1, minds); } context.Response.Write(json2); context.Response.End(); break; #endregion } } private string Convert2MindEntity(IList<EasyUiTree> list1, IList<jsMindEntity> minds, string parentid = "", bool isfirst = true) { jsMindEntity mind = null; foreach (var item in list1) { mind = new jsMindEntity(); mind.id = item.id; mind.topic = item.text; mind.parentid = parentid; if (isfirst == true) { mind.isroot = true; } else { mind.isroot = false; } mind.type = ((int)((item.attributes as dynamic).LimitObjectType)).ToString(); minds.Add(mind); if (item.children != null && item.children.Count > 0) { Convert2MindEntity(item.children, minds, item.id, false); } } return Newtonsoft.Json.JsonConvert.SerializeObject(minds); } private void SetEasyUiTreeTag1(IList<EasyUiTree> children, string RefTableName, string DataValueField, string DataTextField, int LimitObjectType, string nodeId = "") { var limit_Object_type = (Limit_Object)LimitObjectType; if (children.Count > 0) { if (!string.IsNullOrEmpty(nodeId)) { } foreach (EasyUiTree e in children) { e.attributes = new { RefTableName = RefTableName, DataValueField = DataValueField, TextValueField = DataTextField, LimitObjectType = LimitObjectType }; if (e.children != null && e.children.Count > 0) { SetEasyUiTreeTag1(e.children, RefTableName, DataValueField, DataTextField, LimitObjectType); } } } } public bool IsReusable { get { return false; } } } }