草稿
/* Copyright (c) 2014 Holworth Software Co., Ltd. All rights reserved * * Create by huanglc@holworth.com at 2014-12-01 16:19:17 * */ using System; using System.Text; using System.Collections.Generic; using Contract.IService; using Framework; using System.Collections; using Contract.Domain; using BaseService; using Contract.IService; using Contract.Domain.Enum.EnumList; using Contract.Domain.Enum.EnumCommon; using System.Linq; using HRAModel.Sys.Enum; namespace Bll { public class BasLimitConfigService : BaseService.EntityService<Contract.Domain.BasLimitConfig>, IBasLimitConfigService { private List<RskLimitObject> ProcessBusiStruc(string nodeId); List<RskLimitObject> objList = new List<RskLimitObject>(); IList<BasLimitBusiStruc> list = BusiStructureService.GetParentList(int.Parse(nodeId)); foreach (var item in list) { RskLimitObject obj = new RskLimitObject(); obj.Topic = item.Name; obj.LimitObjectId = int.Parse(item.Id); obj.LimitObjectType = (int)Limit_Object.Limit_Object_BusiStruc; objList.Add(obj); } return objList; } private List<RskLimitObject> ProcessProductGroup(string nodeId); List<RskLimitObject> objList = new List<RskLimitObject>(); var root = new RskLimitObject() { Topic = "产品群", LimitObjectType = (int)Limit_Object.Limit_Object_BasProductGroup }; var rootExistInfo = new QueryInfo("RskLimitObject"); rootExistInfo.AddParam("LimitObjectType", (int)Limit_Object.Limit_Object_BasProductGroup); rootExistInfo.Where.Add("exits", " and LimitObjectId is null"); var rootExists = Dao.GetTotalCount(rootExistInfo) > 0; objList.Add(root); IList<BasProductGroup> list = ProductGroupService.GetParentList(int.Parse(nodeId)); foreach (var item in list) { RskLimitObject obj = new RskLimitObject(); obj.Topic = item.ProductGroupName; obj.LimitObjectId = int.Parse( item.Id); obj.LimitObjectType =(int) Limit_Object.Limit_Object_BasProductGroup; //if (root.Children == null) //{ // root.Children = new List<RskLimitObject>(); //} //if(item.Id==nodeId) //root.Children.Add(obj); objList.Add(obj); } if (list.Count == 0) { objList.Clear(); } return objList; } public string TypeFilter(string type) { string result = ""; Limit_Object typeEnum = (Limit_Object)int.Parse(type); switch (typeEnum) { case Limit_Object.Limit_Object_BusiStruc: result += @"<option value='" + (int)Limit_Object.Limit_Object_BusiStruc + "'>" + Limit_Object.Limit_Object_BusiStruc.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCounterparty + "'>" + Limit_Object.Limit_Object_BasCounterparty.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasProductGroup + "'>" + Limit_Object.Limit_Object_BasProductGroup.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCurrency + "'>" + Limit_Object.Limit_Object_BasCurrency.GetEnumDefaultName() + "</option>"; break; case Limit_Object.Limit_Object_BasCurrency: result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCurrency + "'>" + Limit_Object.Limit_Object_BasCurrency.GetEnumDefaultName() + "</option>"; break; case Limit_Object.Limit_Object_BasProductGroup: result += @"<option value='" + (int)Limit_Object.Credit_Rate + "'>" + Limit_Object.Credit_Rate.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasProductGroup + "'>" + Limit_Object.Limit_Object_BasProductGroup.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCurrency + "'>" + Limit_Object.Limit_Object_BasCurrency.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCounterparty + "'>" + Limit_Object.Limit_Object_BasCounterparty.GetEnumDefaultName() + "</option>"; break; default: result += @"<option value='" + (int)Limit_Object.Limit_Object_BusiStruc + "'>" + Limit_Object.Limit_Object_BusiStruc.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasProductGroup + "'>" + Limit_Object.Limit_Object_BasProductGroup.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCurrency + "'>" + Limit_Object.Limit_Object_BasCurrency.GetEnumDefaultName() + "</option>"; result += @"<option value='" + (int)Limit_Object.Limit_Object_BasCounterparty + "'>" + Limit_Object.Limit_Object_BasCounterparty.GetEnumDefaultName() + "</option>"; break; } return result; } public List<RskLimitObject> LoadNode(); public IList<RskLimitObject> AddNode(string nodeId, string nodeType,string selectedNodeTypeId, string selectedNodeId, string selectedNodeType) { List<RskLimitObject> objList = new List<RskLimitObject>(); List<RskLimitObject> limitList= LoadNode(); Limit_Object limitObj = (Limit_Object)(int.Parse(nodeType)); switch (limitObj) { case Limit_Object.Limit_Object_BusiStruc: objList = ProcessBusiStruc(nodeId); break; case Limit_Object.Limit_Object_BasProductGroup: objList = ProcessProductGroup(nodeId); break; case Limit_Object.Limit_Object_RskFactor: objList = ProcessRskFactor(nodeId); break; case Limit_Object.Limit_Object_BasCurrency: objList= ProcessBasCurrency(nodeId); break; case Limit_Object.Limit_Object_BasCounterparty: objList = ProcessBasCounterparty(nodeId); break; case Limit_Object.Limit_Object_BasPortfolio: objList= ProcessBasPortfolio(nodeId); break; case Limit_Object.Credit_Rate: break; default: break; } int index=0; int currentNopdeId = int.Parse(selectedNodeId); if (string.IsNullOrEmpty(selectedNodeTypeId)) { if (objList.Count>0) { objList = objList.FindAll((RskLimitObject n) => n.LimitObjectId != null); } } else { if (nodeType == selectedNodeType) { for (int i = 0; i < objList.Count; i++) { if (objList[i].LimitObjectId == int.Parse(selectedNodeTypeId)) { index = i + 1; break; } } } } index = MergeBranch(limitList, objList,int.Parse( selectedNodeId), index); IList<RskLimitObject> resultList = new List<RskLimitObject>(); for (int j=index ; j < objList.Count; j++) { if (string.IsNullOrEmpty(objList[j].Id)) objList[j].State.MarkNew(); else { objList[j].State.MarkDirty(); } objList[j] = Dao.SaveOrUpdate(objList[j]) as RskLimitObject; resultList.Add(objList[j]); if (j!= objList.Count-1) { objList[j + 1].Parentid = int.Parse(objList[j].Id); } } return resultList; } private List<RskLimitObject> ProcessBasPortfolio(string nodeId); private List<RskLimitObject> ProcessBasCounterparty(string nodeId); var counterparty = Dao.FindById(typeof(BasCounterparty), nodeId, null, null) as BasCounterparty; if (counterparty == null) { return new List<RskLimitObject>(); throw new Exception("节点可能已经被删除!"); } var list = new List<RskLimitObject>(); var rootExistInfo = new QueryInfo("RskLimitObject"); rootExistInfo.AddParam("LimitObjectType", (int)Limit_Object.Limit_Object_BasCounterparty); rootExistInfo.Where.Add("exits", " and LimitObjectId is null"); var rootExists = Dao.GetTotalCount(rootExistInfo) > 0; if (!rootExists) list.Add(new RskLimitObject() { Topic = "交易对手", LimitObjectType = (int)Limit_Object.Limit_Object_BasCounterparty }); list.Add(new RskLimitObject() { Topic = counterparty.CounterpartyName, LimitObjectType = (int)Limit_Object.Limit_Object_BasCounterparty, LimitObjectId = int.Parse(nodeId) }); return list; } private List<RskLimitObject> ProcessBasCurrency(string nodeId); var currencyInfo = new QueryInfo("BasCurrency"); currencyInfo.AddParam("Id", nodeId); var currency = Dao.FindOne(currencyInfo) as BasCurrency; if (currency == null) { return new List<RskLimitObject>(); //throw new Exception("节点可能已经被删除!"); } var list = new List<RskLimitObject>(); var rootExistInfo = new QueryInfo("RskLimitObject"); rootExistInfo.AddParam("LimitObjectType", (int)Limit_Object.Limit_Object_BasCurrency); rootExistInfo.Where.Add("exits", " and LimitObjectId is null"); var rootExists = Dao.GetTotalCount(rootExistInfo) > 0; if (!rootExists) list.Add(new RskLimitObject() { Topic = "币种", LimitObjectType =(int) Limit_Object.Limit_Object_BasCurrency }); list.Add(new RskLimitObject() { Topic=currency.CurrencyName, LimitObjectType = (int)Limit_Object.Limit_Object_BasCurrency ,LimitObjectId=int.Parse(nodeId)}); return list; } private List<RskLimitObject> ProcessRskFactor(string nodeId); var rskFactor = Dao.FindById(typeof(RskFactor), nodeId, null, null) as RskFactor; if (rskFactor == null) { return new List<RskLimitObject>(); throw new Exception("节点可能已经被删除!"); } var list = new List<RskLimitObject>(); var rootExistInfo = new QueryInfo("RskLimitObject"); rootExistInfo.AddParam("LimitObjectType", (int)Limit_Object.Limit_Object_RskFactor); rootExistInfo.Where.Add("exits", " and LimitObjectId is null"); var rootExists = Dao.GetTotalCount(rootExistInfo) > 0; if (!rootExists) list.Add(new RskLimitObject() { Topic = "风险因子", LimitObjectType = (int)Limit_Object.Limit_Object_RskFactor }); list.Add(new RskLimitObject() { Topic = rskFactor.RiskFactorName, LimitObjectType = (int)Limit_Object.Limit_Object_RskFactor, LimitObjectId = int.Parse(nodeId) }); return list; } private int MergeBranch(List<RskLimitObject> limitList, IList<RskLimitObject> objList, int startNodeId, int index) { List<RskLimitObject> tmp = limitList.FindAll((RskLimitObject n) => n.Parentid == startNodeId).ToList(); if (index < objList.Count) { if (tmp.Count > 0) { RskLimitObject a = tmp.Find((RskLimitObject n) => n.LimitObjectId == objList[index].LimitObjectId && n.LimitObjectType == objList[index].LimitObjectType); if (a == null) { objList[index].Parentid = startNodeId; return index; } index += 1; index = MergeBranch(limitList, objList, int.Parse(a.Id), index); } else if (tmp.Count == 0) { objList[index].Parentid = startNodeId; } } return index; } public int DeleteBranch(int startNodeId); private void Delete(List<RskLimitObject> limitList, int startNodeId); private Contract.IService.IBasProductGroupService productGroupService; Contract.IService.IBasProductGroupService ProductGroupService { get { if (productGroupService == null) { productGroupService = ctx.GetObject("BasProductGroupService") as Contract.IService.IBasProductGroupService; } return productGroupService; } } private Contract.IService.IBasLimitBusiStrucService busiStructureService; Contract.IService.IBasLimitBusiStrucService BusiStructureService { get { if (busiStructureService == null) { busiStructureService = (IBasLimitBusiStrucService)ctx.GetObject("BasLimitBusiStrucService"); } return busiStructureService; } } } public class RiskLimitObjectDistict : IEqualityComparer<RskLimitObject> { public bool Equals(RskLimitObject x, RskLimitObject y) { return (x.LimitObjectId == y.LimitObjectId) && (x.LimitObjectType == y.LimitObjectType); } public int GetHashCode(RskLimitObject obj) { return 0; } } }