/// <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); }
/// <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); }
/// <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); }