示例#1
0
        /// <summary>
        /// 针对同一部门的匹配规则
        /// </summary>
        /// <param name="matchBll"></param>
        /// <returns></returns>
        public MatchCorpPolicyAndAduitResultModel DoMatch(SameDepartmentBll matchBll)
        {
            /**
             * 如果当前乘客的差旅或者审批规则都一致,则不冲突;有冲突的时候,获取对应的乘客的差旅和审批规则
             */
            if (matchBll.CustomerList == null)
            {
                throw new Exception("未找到乘客对应的信息");
            }

            MatchCorpPolicyAndAduitResultModel resultModel = new MatchCorpPolicyAndAduitResultModel()
            {
                IsConflict     = true,//默认冲突
                ChangeInfoList = new List <CorpPolicyAndAduitChangeModel>()
            };

            if (matchBll.CustomerList[0].CorpDepartID.HasValue)
            {
                var changeInfo = GetChange(matchBll.CustomerList[0].CorpDepartID.Value, matchBll.CustomerList, matchBll.IsAllowUserInsurance);
                resultModel.ChangeInfoList.Add(changeInfo);

                List <int> policyIdList = new List <int>();
                List <int> aduitIdList  = new List <int>();

                if (changeInfo != null)
                {
                    if (changeInfo.CorpPolicyChangeList != null && changeInfo.CorpPolicyChangeList.Count > 0)
                    {
                        changeInfo.CorpPolicyChangeList.ForEach(n => { policyIdList.Add(n.PolicyId); });
                    }

                    if (changeInfo.CorpAduitChangeList != null && changeInfo.CorpAduitChangeList.Count > 0)
                    {
                        changeInfo.CorpAduitChangeList.ForEach(n => { aduitIdList.Add(n.AduitId); });
                    }
                }

                if (policyIdList.Count == 1 && aduitIdList.Count == 1)//当前只存在一条政策并且一条审批规则的时候,设置不冲突
                {
                    resultModel.IsConflict            = false;
                    resultModel.DefaultPolicyId       = policyIdList[0];
                    resultModel.DefaultAduitId        = aduitIdList[0];
                    resultModel.DefaultDepartmentId   = resultModel.ChangeInfoList[0].DepartmentId;
                    resultModel.DefaultDepartmentName = resultModel.ChangeInfoList[0].DepartmentName;

                    var temp =
                        changeInfo?.CorpPolicyChangeList?.Find(n => n.PolicyId == resultModel.DefaultPolicyId.Value);

                    resultModel.DefaultInsuranceLimit     = temp?.ViolateNPolicyValI;
                    resultModel.DefaultViolateTPolicyValQ = temp?.ViolateTPolicyValQ;
                    resultModel.DefaultViolateTPolicyValM = temp?.ViolateTPolicyValM;
                    resultModel.DefaultViolateTPolicyValS = temp?.ViolateTPolicyValS;
                }

                if (policyIdList.Count == 0 && aduitIdList.Count == 0)//当政策和审批规则都不存在的时候,设置不冲突
                {
                    resultModel.IsConflict = false;
                }
                //放开部门限制
                AddOtherChangeInfo(matchBll.CustomerList[0].CorpID,
                                   new List <int>()
                {
                    matchBll.CustomerList[0].CorpDepartID.Value
                }, resultModel.ChangeInfoList,
                                   matchBll.IsAllowUserInsurance);

                #region 获取项目成本中心

                string corpId = matchBll.CustomerList[0].CorpID.ToLower();
                List <ProjectNameEntity> projectNameEntities = _projectNameDal.Query <ProjectNameEntity>(
                    n => n.CorpId.ToLower() == corpId && n.IsDelete == "F")
                                                               .ToList();
                List <int> projectIdList = projectNameEntities.Select(n => n.ProjectId)
                                           .Distinct()
                                           .ToList();



                if (projectIdList != null && projectIdList.Count > 0)
                {
                    resultModel.ProjectChangeInfoList = new List <CorpPolicyAndAduitChangeProjectModel>();

                    foreach (var projectId in projectIdList)
                    {
                        var project = projectNameEntities.Find(n => n.ProjectId == projectId);
                        CorpPolicyAndAduitChangeProjectModel p = new CorpPolicyAndAduitChangeProjectModel();
                        p.ProjectId            = projectId;
                        p.ProjectName          = project.ProjectName;
                        p.CorpPolicyChangeList =
                            _changeInfoFactory.GetCorpPolicyChangeInfoByProjectId(projectId,
                                                                                  matchBll.IsAllowUserInsurance);
                        p.CorpAduitChangeList = _changeInfoFactory.GetCorpAduitChangeInfoByProjectId(projectId);

                        resultModel.ProjectChangeInfoList.Add(p);
                    }
                }
                #endregion
            }

            return(resultModel);
        }
示例#2
0
        /// <summary>
        /// 针对所有临时客人的匹配规则
        /// </summary>
        /// <param name="matchBll"></param>
        /// <returns></returns>
        public MatchCorpPolicyAndAduitResultModel DoMatch(AllTemporaryBll matchBll)
        {
            /**
             * 不存在冲突,允许下一步
             * 如果要选择差旅政策或审批规则,按照当前预定人的政策和审批规则
             * **/

            MatchCorpPolicyAndAduitResultModel resultModel = new MatchCorpPolicyAndAduitResultModel()
            {
                IsConflict     = false,
                ChangeInfoList = new List <CorpPolicyAndAduitChangeModel>()
            };

            //按照当前预定人的政策和审批规则
            if (matchBll.BookingCustomerModel.CorpDepartID.HasValue &&
                !string.IsNullOrEmpty(matchBll.BookingCustomerModel.DepartmentName))
            {
                CorpPolicyAndAduitChangeModel changeInfo = new CorpPolicyAndAduitChangeModel();
                changeInfo.DepartmentId         = matchBll.BookingCustomerModel.CorpDepartID;
                changeInfo.DepartmentName       = matchBll.BookingCustomerModel.DepartmentName;
                changeInfo.CorpPolicyChangeList =
                    _changeInfoFactory.GetCorpPolicyChangeInfo(matchBll.BookingCustomerModel.Cid,
                                                               matchBll.BookingCustomerModel.CorpDepartID.Value, matchBll.IsAllowUserInsurance);
                changeInfo.CorpAduitChangeList =
                    _changeInfoFactory.GetCorpAduitChangeInfo(matchBll.BookingCustomerModel.Cid,
                                                              matchBll.BookingCustomerModel.CorpDepartID.Value);
                resultModel.ChangeInfoList.Add(changeInfo);

                //放开部门限制
                AddOtherChangeInfo(matchBll.BookingCustomerModel.CorpID,
                                   new List <int>()
                {
                    matchBll.BookingCustomerModel.CorpDepartID.Value
                }, resultModel.ChangeInfoList,
                                   matchBll.IsAllowUserInsurance);


                #region 获取项目成本中心
                List <ProjectNameEntity> projectNameEntities = _projectNameDal.Query <ProjectNameEntity>(
                    n => n.CorpId.ToLower() == matchBll.BookingCustomerModel.CorpID.ToLower() && n.IsDelete == "F")
                                                               .ToList();
                List <int> projectIdList = projectNameEntities.Select(n => n.ProjectId)
                                           .Distinct()
                                           .ToList();



                if (projectIdList != null && projectIdList.Count > 0)
                {
                    resultModel.ProjectChangeInfoList = new List <CorpPolicyAndAduitChangeProjectModel>();

                    foreach (var projectId in projectIdList)
                    {
                        var project = projectNameEntities.Find(n => n.ProjectId == projectId);
                        CorpPolicyAndAduitChangeProjectModel p = new CorpPolicyAndAduitChangeProjectModel();
                        p.ProjectId            = projectId;
                        p.ProjectName          = project.ProjectName;
                        p.CorpPolicyChangeList =
                            _changeInfoFactory.GetCorpPolicyChangeInfoByProjectId(projectId,
                                                                                  matchBll.IsAllowUserInsurance);
                        p.CorpAduitChangeList = _changeInfoFactory.GetCorpAduitChangeInfoByProjectId(projectId);

                        resultModel.ProjectChangeInfoList.Add(p);
                    }
                }
                #endregion
            }



            return(resultModel);
        }
示例#3
0
        /// <summary>
        /// 针对不同部门的匹配规则
        /// </summary>
        /// <param name="matchBll"></param>
        /// <returns></returns>
        public MatchCorpPolicyAndAduitResultModel DoMatch(DiffDepartmentBll matchBll)
        {
            /**
             * 存在冲突,不许下一步,必须变更规则
             * 获取所有部门下的规则信息
             */

            if (matchBll.CustomerList == null)
            {
                throw new Exception("未找到乘客对应的信息");
            }

            MatchCorpPolicyAndAduitResultModel resultModel = new MatchCorpPolicyAndAduitResultModel()
            {
                IsConflict     = true,
                ChangeInfoList = new List <CorpPolicyAndAduitChangeModel>()
            };

            //循环遍历乘客信息,获取对应的差旅政策和审批规则
            List <int> departIdList = new List <int>();//部门id信息

            matchBll.CustomerList.ForEach(n => { departIdList.Add(n.CorpDepartID ?? 0); });
            departIdList = departIdList.Distinct().ToList(); //去除重复部门id

            foreach (int departId in departIdList)           //循环部门id
            {
                var changeInfo = GetChange(departId, matchBll.CustomerList, matchBll.IsAllowUserInsurance);
                resultModel.ChangeInfoList.Add(changeInfo);
            }

            //放开部门限制
            AddOtherChangeInfo(matchBll.CustomerList[0].CorpID, departIdList, resultModel.ChangeInfoList,
                               matchBll.IsAllowUserInsurance);

            #region 获取项目成本中心
            string corpId = matchBll.CustomerList[0].CorpID.ToLower();
            List <ProjectNameEntity> projectNameEntities = _projectNameDal.Query <ProjectNameEntity>(
                n => n.CorpId.ToLower() == corpId && n.IsDelete == "F")
                                                           .ToList();
            List <int> projectIdList = projectNameEntities.Select(n => n.ProjectId)
                                       .Distinct()
                                       .ToList();



            if (projectIdList != null && projectIdList.Count > 0)
            {
                resultModel.ProjectChangeInfoList = new List <CorpPolicyAndAduitChangeProjectModel>();

                foreach (var projectId in projectIdList)
                {
                    var project = projectNameEntities.Find(n => n.ProjectId == projectId);
                    CorpPolicyAndAduitChangeProjectModel p = new CorpPolicyAndAduitChangeProjectModel();
                    p.ProjectId            = projectId;
                    p.ProjectName          = project.ProjectName;
                    p.CorpPolicyChangeList =
                        _changeInfoFactory.GetCorpPolicyChangeInfoByProjectId(projectId,
                                                                              matchBll.IsAllowUserInsurance);
                    p.CorpAduitChangeList = _changeInfoFactory.GetCorpAduitChangeInfoByProjectId(projectId);

                    resultModel.ProjectChangeInfoList.Add(p);
                }
            }
            #endregion

            return(resultModel);
        }