zoukankan      html  css  js  c++  java
  • 草稿

    /* 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;
            }
        }
    }
  • 相关阅读:
    SQL随记(四)
    一些有用的方法命令
    导航目录
    HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别
    MyBatis学习资料
    Spring Cloud资料
    聚类算法对比
    Spark 读取HBase数据
    ZooKeeper设置ACL权限控制
    大数据工具选择
  • 原文地址:https://www.cnblogs.com/kexb/p/5638662.html
Copyright © 2011-2022 走看看