using BaseOUDAL; using Org.BouncyCastle.Ocsp; using System.Collections; using System.Data; using System.Globalization; using System.Text; using YLErp.BLL; using YLErp.Commons; using YLErp.DBModels; using YLErp.DBModels.Consts; using YLErp.Helpers; using YLErp.Model; using YLErp.Model.Enum; using YLErp.Modules.SystemModule; namespace YLErp.Modules.ClientModule { /// /// 客户信息导入 /// public class ClientImportService : ClientBaseService { public ClientImportService(OptUserInfo userInfo) : base(userInfo) { } /// /// 从csv文件导入客户 /// public HandleResult UploadClientCsv(string filePath) { //验证并转换文件格式为utf-8 var resultList = new List(); var originaltype = EncodingType.GetType(filePath, resultList); ChangeFileEncoding(filePath, originaltype); var clinetList = new List(); string Number; string Name; string CustomerNatureName; int CustomerNature; string Level; int LevelId; int CreditRatingId; string CreditRatingName; string LicenseCode; string RegisteredCapital; string ActualBeneficiary; string ActualController; string RegisteredAddress; string PostalAddress; string SalesDepartment; string Seller; string CustomerManager; int CustomerManagerId; string ClientType; string InstitutionalAttributes; string LicenseType; int IsTradeCredit; string samePeerDesc; string Remark; Client client; ClientBankCard bc; var rowNum = 0; var cList = new List(); var bList = new List(); using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { using (var sr = new StreamReader(fs, Encoding.UTF8)) { while (!sr.EndOfStream) { var line = sr.ReadLine(); if (rowNum == 0) { rowNum++; continue; } rowNum++; if (line == "") { continue; } var res = line.Split(new char[] { ',' }, StringSplitOptions.None); if (res != null && res.Length > 0) { var isAllEmpty = true; for (var i = 0; i < res.Length; i++) { if (!string.IsNullOrWhiteSpace(res[i])) { isAllEmpty = false; } } if (isAllEmpty) { continue; } if (res.Length < 19) { return "导入文件列缺失!请检查后再导入!"; } } Number = res[0]; Name = res[1]; CustomerNatureName = res[2]; var ht = new Hashtable(); foreach (var customerNature in Enum.GetValues(typeof(CustomerNatureEnum))) { ht.Add(Enum.GetName(typeof(CustomerNatureEnum), customerNature), customerNature); } CustomerNature = ht[CustomerNatureName] == null ? 0 : (int)ht[CustomerNatureName]; Level = res[3]; var level = DbContext.clientlevel.Where(x => x.LevelName == Level).FirstOrDefault(); if (level == null) { LevelId = 0; } else { LevelId = level.id; } CreditRatingName = res[4]; var creditRating = DbContext.credit_rating.Where(x => x.CreditName == CreditRatingName && x.ValidState != "InValid").FirstOrDefault(); if (creditRating == null) { CreditRatingId = 0; } else { CreditRatingId = creditRating.id; } LicenseCode = ReplaceTab(res[5]); RegisteredCapital = ReplaceTab(res[6]); ActualBeneficiary = res[7]; ActualController = res[8]; DateTime.TryParse(res[9], out var ProtocolSignDate); RegisteredAddress = res[10]; PostalAddress = res[11]; SalesDepartment = res[12]; Seller = res[13]; CustomerManager = res[14]; ClientType = res[15]; var htClientType = new Hashtable(); foreach (var clientType in Enum.GetValues(typeof(ClientTypeEnum))) { htClientType.Add(Enum.GetName(typeof(ClientTypeEnum), clientType), clientType); } ClientType = htClientType[ClientType] == null ? null : ClientType; InstitutionalAttributes = res[16]; if (InstitutionalAttributes != "不适用") { var htInstitutionalAttributes = new Hashtable(); foreach (var institutionalAttributes in Enum.GetValues(typeof(InstitutionalAttributesEnum))) { htInstitutionalAttributes.Add(Enum.GetName(typeof(InstitutionalAttributesEnum), institutionalAttributes), institutionalAttributes); } InstitutionalAttributes = htInstitutionalAttributes[InstitutionalAttributes] == null ? null : InstitutionalAttributes; } LicenseType = res[17]; var htLicenseType = new Hashtable(); foreach (var licenseType in Enum.GetValues(typeof(LicenseTypeEnum))) { htLicenseType.Add(Enum.GetName(typeof(LicenseTypeEnum), licenseType), licenseType); } LicenseType = htLicenseType[LicenseType] == null ? null : LicenseType; samePeerDesc = res[19]; Remark = res[20]; //客户编号唯一验证 if (!string.IsNullOrWhiteSpace(Number) && DbContext.client.FirstOrDefault(a => a.Number.Equals(Number)) != null) { return "第" + rowNum + "行编号" + Number + "已存在,导入失败"; } //客户名称唯一验证 if (!string.IsNullOrWhiteSpace(Name) && DbContext.client.FirstOrDefault(a => a.Name.Equals(Name)) != null) { return "第" + rowNum + "行客户名称" + Name + "已存在,导入失败"; } //必填项验证 var nullColumnName = ""; if (string.IsNullOrWhiteSpace(Name)) { nullColumnName += "客户姓名,"; } //if (CustomerNature <= 0) //{ // nullColumnName += "客户性质,"; //} //if (LevelId <= 0) //{ // nullColumnName += "客户等级,"; //} //if (CreditRatingId <= 0) //{ // nullColumnName += "资信等级,"; //} //if (string.IsNullOrWhiteSpace(LicenseCode)) //{ // nullColumnName += "营业执照号,"; //} //if (string.IsNullOrWhiteSpace(RegisteredCapital)) //{ // nullColumnName += "注册资本(万元),"; //} //if (string.IsNullOrWhiteSpace(ActualBeneficiary)) //{ // nullColumnName += "实际受益人,"; //} //if (string.IsNullOrWhiteSpace(ActualController)) //{ // nullColumnName += "实际控制人,"; //} //if (ProtocolSignDate == DateTime.MinValue) //{ // nullColumnName += "签署日期,"; //} //if (string.IsNullOrWhiteSpace(RegisteredAddress)) //{ // nullColumnName += "注册地址,"; //} //if (string.IsNullOrWhiteSpace(PostalAddress)) //{ // nullColumnName += "办公地址,"; //} if (!PS.Config.Is格林大华) { var manager = UserBLL.FirstOrDefault(x => x.Name == CustomerManager); if (string.IsNullOrWhiteSpace(CustomerManager) || manager == null) { //nullColumnName += "客户经理,"; CustomerManagerId = 0; } else { CustomerManagerId = manager.Id; } } else { //if (string.IsNullOrWhiteSpace(CustomerManager)) //{ // nullColumnName += "客户经理,"; // CustomerManagerId = 0; //} CustomerManagerId = 0; } //if (string.IsNullOrWhiteSpace(ClientType)) //{ // nullColumnName += "客户类别,"; //} //if (string.IsNullOrWhiteSpace(InstitutionalAttributes)) //{ // nullColumnName += "机构属性,"; //} //if (string.IsNullOrWhiteSpace(LicenseType)) //{ // nullColumnName += "证照类型,"; //} if (!string.IsNullOrWhiteSpace(nullColumnName)) { return "第" + rowNum + "行数据" + nullColumnName.Substring(0, nullColumnName.Length - 1) + "未填写正确,导入失败"; } if (res[18] == "是" || res[18] == "否") { IsTradeCredit = res[18] == "否" ? 0 : 1; } else { return "第" + rowNum + "行期权费授信" + res[18] + "格式错误,请输入“是”或者“否”,导入失败"; } if (samePeerDesc.IsNullOrWhiteSpace()) { samePeerDesc = "非同业"; } var samePeerDescList = EnumHelper.GetDescriptionsByEnum(typeof(SamePeerEnum)); if (!samePeerDescList.ContainsKey(samePeerDesc)) { return "第" + rowNum + "行同业/非同业有误,导入失败"; } #region 客户类别,机构属性,客户性质,关联性逻辑判断 if (ClientType == ClientTypeEnum.机构.ToString() && (InstitutionalAttributes == "不适用" || CustomerNature == (int)CustomerNatureEnum.自然人)) { return "第" + rowNum + "行客户类别,机构属性,客户性质关联性质有误,导入失败"; } if (ClientType == ClientTypeEnum.产品.ToString() && (InstitutionalAttributes != "不适用" || (CustomerNature != (int)CustomerNatureEnum.证券公司 && CustomerNature != (int)CustomerNatureEnum.保险公司 && CustomerNature != (int)CustomerNatureEnum.公募基金 && CustomerNature != (int)CustomerNatureEnum.私募基金 && CustomerNature != (int)CustomerNatureEnum.商业银行 && CustomerNature != (int)CustomerNatureEnum.其他))) { return "第" + rowNum + "行客户类别,机构属性,客户性质关联性质有误,导入失败"; } if (ClientType == ClientTypeEnum.自然人.ToString() && (InstitutionalAttributes != "不适用" || CustomerNature != (int)CustomerNatureEnum.自然人)) { return "第" + rowNum + "行客户类别,机构属性,客户性质关联性质有误,导入失败"; } if (DbContext.client_black.Any(c => c.Name == Name && ClientBlackApprovalPolicy.EffectiveStates.Contains(c.State))) { return $"客户'{Name}'已经存在于黑名单中”"; } #endregion client = new Client { Number = Number, Name = Name, CustomerNature = CustomerNature, LevelId = LevelId, Level = Level, LicenseCode = LicenseCode, RegisteredCapital = RegisteredCapital, ActualBeneficiary = ActualBeneficiary, ActualController = ActualController, ProtocolSignDate = ProtocolSignDate, RegisteredAddress = RegisteredAddress, PostalAddress = PostalAddress }; var depart = GetDepartmentByName(SalesDepartment); if (depart == null) { return "第" + rowNum + "行归属营业部不存在,导入失败"; } else { client.SalesDepartmentId = depart.Id; } //销售员 if (!string.IsNullOrWhiteSpace(Seller)) { var tempArray = Seller.Split(','); if (tempArray.Length <= 1) { tempArray = Seller.Split(','); } var salesmanIds = new SalesModule.SalesmenDataService(OptUser).GetSalesIdByNames(tempArray).Select(o => o.id); if (salesmanIds.Count() == tempArray.Length) { Seller = string.Join(",", salesmanIds); } else { return "第" + rowNum + "行有销售员不存在或已禁用,导入失败"; } } client.Seller = Seller; client.CustomerManager = CustomerManager; client.CustomerManagerId = CustomerManagerId.ToString(); client.Remark = Remark; client.ClientType = ClientType; client.InstitutionalAttributes = InstitutionalAttributes == "不适用" ? null : InstitutionalAttributes; client.LicenseType = LicenseType; client.IsTradeCredit = IsTradeCredit; client.SamePeer = samePeerDesc.GetEnumByDescription().GetHashCode(); //if (ClientType == ClientTypeEnum.产品.ToString()) //{ // client.Remark = string.IsNullOrWhiteSpace(client.Remark) ? "注:若客户类别为“产品”,则“注册资本”显示为“产品规模”" : client.Remark; //} var isClientProcess = yldb.approvalprocess.Where(a => a.processType == "OpenProcess");//判断有没有设置开户审批流程 if (isClientProcess == null) { client.ProcessOrderId = -2; client.ProcessStatus = "已开户"; client.ProcessOptDate = DateTime.Now; } else { client.ProcessStatus = "未提交"; client.ProcessOrderId = 0; client.ProcessOptDate = DateTime.Now; } client.OptId = UserId; client.OptName = UserName; client.OptDate = DateTime.Now; SetDBModelCreator(client); DbContext.client.Add(client); //加入保存的客户信息 用 list client cList.Add(client); if (res.Count() >= 23) { var bankAccountName = res[20]; var bankCardNumber = res[21]; var bankName = res[22]; bc = new ClientBankCard { ClientName = bankAccountName, Bank = bankName, Card = bankCardNumber.Replace(" ", "") }; bList.Add(bc); } } } if (cList == null || cList.Count == 0) { return "请确保上传文件数据不为空,导入失败"; } DbContext.SaveChanges(); foreach (var c in cList) { //每一个成功开户的客户(即首次从【开户管理】转到【客户列表】),系统会自动在【资信等级】页面对该客户留下第一条“资信等级”记录, //但是具体等级是什么,适用期限(生效日期、到期日期)是什么,都空着,待风控人员来填写; if (c.ProcessStatus == "已开户" && !DbContext.Client_Rating.Any(x => !x.IsDeleted && x.ClientId == c.id)) { var emptyRating = new ClientRating { ClientId = c.id, ClientName = c.Name, ClientNumber = c.Number, Comments = "上传-开户成功自动生成", OptId = UserId, OptName = UserName, OptDate = DateTime.Now, RatingStartDate = valuedateBLL.ValueDate }; emptyRating.RatingDeadLine = emptyRating.RatingStartDate.Value.AddYears(99); var defaultRating = DbContext.credit_rating.Where(x => x.ValidState == "Valid").FirstOrDefault(); emptyRating.CreditRatingId = defaultRating?.id ?? 0; emptyRating.CreditRatingStr = defaultRating?.CreditName; emptyRating.ProcessStatus = "未审批"; emptyRating.ProcessOrderId = 0; emptyRating.ProcessOptDate = DateTime.Now; DbContext.Client_Rating.Add(emptyRating); DbContext.SaveChanges(); } foreach (var b in bList) { if (c.Name != b.ClientName) { continue; } var existingBankCards = DbContext.bankcard.FirstOrDefault(x => x.ApprovalOrder < 1 && x.ClientName == b.ClientName && x.Bank == b.Bank && x.Card == b.Card); if (existingBankCards == null) { var bankcard = new ClientBankCard { ClientId = c.id, ClientName = c.Name, Card = b.Card.Replace(" ", ""), Bank = b.Bank, ValidState = "Valid", OptId = UserId, OptName = UserName, OptDate = DateTime.Now, ApprovalOrder = (int)ApprovalOrderEnum.无需审批 }; DbContext.bankcard.Add(bankcard); DbContext.SaveChanges(); } } } } return HandleResult.Success; } private void ChangeFileEncoding(string filename, Encoding encoding) { var fs = new FileStream(filename, FileMode.Open, FileAccess.Read); var flieByte = new byte[fs.Length]; fs.Read(flieByte, 0, flieByte.Length); fs.Close(); StreamWriter docWriter; var ec = Encoding.GetEncoding("UTF-8"); docWriter = new StreamWriter(filename, false, ec); docWriter.Write(encoding.GetString(flieByte)); docWriter.Close(); } private string ReplaceTab(string str, bool replaceComma = false) { if (str != null) { str = str.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace("\"", ""); if (replaceComma) { str = str.Replace(",", ""); } } return str; } /// /// 从excel文件导入客户 /// public HandleResult UploadClientExcel(Stream stream, bool isSellerV2) { var basedb = new ErpBaseContext(); var clients = new ExcelHelper().ExcelToDataTable(stream, null, true); var clinetList = new List(); var Number = ""; var Name = ""; var CustomerNature1 = ""; var CustomerNature2 = ""; var Level = ""; int LevelId; var ParentName = ""; int ParentId; var IsDocShowParen = ""; int? IsDocShowParentName = null; int CreditRatingId; var CreditRatingName = ""; var LicenseType = ""; var LicenseCode = ""; var RegisteredCapital = ""; var ActualBeneficiary = ""; var ActualController = ""; var RegisteredAddress = ""; var PostalAddress = ""; var SalesDepartment = ""; var Seller = ""; var CustomerManager = ""; int? CustomerManagerId; var ClientType = ""; var InstitutionalAttributes = ""; var IsTradeCreditString = ""; var IsCreditOnString = ""; int IsTradeCredit; int IsCreditOn; var SamePeerDesc = ""; var BusinessType = ""; var InvestorTypeName = ""; int? InvestorType; var BadFaithRecordName = ""; int? BadFaithRecord; var IsIndustryConnectVarietyString = ""; int? IsIndustryConnectVariety = null; var FundsSourceName = ""; int? FundsSource; var IsRealControlString = ""; int? IsRealControl = null; int? IsSmallAndMicroEnterprises = 0; var TransactionTarget = ""; var DerivativesInvestmentVarieties = ""; var InvestmentTermName = ""; int? InvestmentTerm; var ExpectedReturnName = ""; var Code = ""; var Abbreviation = ""; var DefaultLoginName = ""; var ProperClientClass = ""; var NFICode = ""; var CounterpartyCode = ""; var RiskServiceDegreeName = ""; int RiskServiceDegree; var SettleCurrency = ""; var BoundSideStr = ""; var Seat = ""; var AgreementBookNo = ""; var AgreementBookType = ""; var AppropriatenessDegree = ""; var SupProtocolCode = ""; var MainProtocolCode = ""; var ProtocolSignVersion = ""; var MarginOptionType = ""; var ProductName = ""; var ClearingAgency = ""; var IsSmallAndMicroEnterprisesString = ""; var LicenseValidTimeStr = ""; var ProtocolSignDate = DateTime.MinValue; Client client; var cList = new List(); for (var i = 0; i < clients.Rows.Count; i++) { var rowNum = i + 2; var emptyRow = true; for (var j = 0; j < clients.Columns.Count; j++) { var str = clients.Rows[i][j]?.ToString()?.Trim(); if (emptyRow && !string.IsNullOrEmpty(str)) { emptyRow = false; } switch (clients.Columns[j].ColumnName) { case "客户编号": Number = str; break; case "客户名称": Name = str; break; case "客户等级": Level = str; break; case "资信级别": CreditRatingName = str; break; case "证照类型": LicenseType = str; break; case "证照编号": LicenseCode = str; break; case "注册资本(万元)": RegisteredCapital = str; break; case "实际受益人": ActualBeneficiary = str; break; case "实际控制人": ActualController = str; break; case "协议签署日期": _ = DateTime.TryParse(str, out ProtocolSignDate) || DateTime.TryParseExact(str, "dd-MM月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out ProtocolSignDate) || DateTime.TryParseExact(str, "dd-M月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out ProtocolSignDate); break; case "注册地址": RegisteredAddress = str; break; case "办公地址": PostalAddress = str; break; case "归属营业部": SalesDepartment = str; break; case "营业部销售": Seller = str; break; case "客户经理": CustomerManager = str; break; case "客户类别": ClientType = str; break; case "机构属性": InstitutionalAttributes = str; break; case "期权费授信": IsTradeCreditString = str; break; case "授信": IsCreditOnString = str; break; case "同业/非同业": SamePeerDesc = str; break; case "行业": BusinessType = str; break; case "投资者类型": InvestorTypeName = str; break; case "不良诚信记录": BadFaithRecordName = str; break; case "行业标的相关": IsIndustryConnectVarietyString = str; break; case "资金来源": FundsSourceName = str; break; case "实际控制关系": IsRealControlString = str; break; case "交易目的": TransactionTarget = str; break; case "交易种类": DerivativesInvestmentVarieties = str; break; case "投资期限": InvestmentTermName = str; break; case "期望收益": ExpectedReturnName = str; break; case "客户代码": Code = str; break; case "客户简称": Abbreviation = str; break; case "默认登录名": DefaultLoginName = str; break; case "适当性类型": ProperClientClass = str; break; case "可接受风险服务": RiskServiceDegreeName = str; break; case "行业代码": NFICode = str; break; case "组织机构代码": CounterpartyCode = str; break; case "所属机构": ParentName = str; break; case "报告展示机构名称": IsDocShowParen = str; break; case "结算币种": SettleCurrency = clients.Rows[i][j].ToString(); break; case "资金流向": BoundSideStr = clients.Rows[i][j].ToString(); break; case "席位": Seat = clients.Rows[i][j].ToString(); break; case "履约协议编号": AgreementBookNo = clients.Rows[i][j].ToString(); break; case "履约协议类型": AgreementBookType = clients.Rows[i][j].ToString(); break; //新增导入适当性评级列 case "适当性评级": AppropriatenessDegree = clients.Rows[i][j].ToString(); break; case "补充协议编号": SupProtocolCode = clients.Rows[i][j].ToString(); break; case "主协议编号": MainProtocolCode = clients.Rows[i][j].ToString(); break; case "协议签署版本": ProtocolSignVersion = clients.Rows[i][j].ToString(); break; case "追保方向": MarginOptionType = clients.Rows[i][j].ToString(); break; case "产品名称": ProductName = clients.Rows[i][j].ToString(); break; case "清算机构": ClearingAgency = clients.Rows[i][j].ToString(); break; case "企业营业执照有效期": LicenseValidTimeStr = str; break; default: break; } } if (emptyRow) { continue; } DictionaryItem item; if (PS.Config.Company != Configuration.CompanyEnum.中金 && !string.IsNullOrEmpty(BusinessType)) { using (var db = new ErpBaseContext()) { item = db.DictionaryItems.FirstOrDefault(x => x.Name == BusinessType); } if (item == null) { return "第" + rowNum + "行业" + BusinessType + "不合法,导入失败"; } else { var customerNatures = (item.ShortName ?? string.Empty).Split(','); Array.Resize(ref customerNatures, 2); CustomerNature1 = customerNatures[0]?.Trim(); CustomerNature2 = customerNatures[1]?.Trim(); } } var level = DbContext.clientlevel.Where(x => x.LevelName == Level).FirstOrDefault(); if (level == null) { LevelId = 0; } else { LevelId = level.id; } var creditRating = DbContext.credit_rating.Where(x => x.CreditName == CreditRatingName && x.ValidState != "InValid").FirstOrDefault(); if (creditRating == null) { CreditRatingId = 0; } else { CreditRatingId = creditRating.id; } var clientparent = DbContext.client.Where(c => c.Name == ParentName && (c.ProcessStatus != "已销户" && c.ProcessStatus != "已休眠")).FirstOrDefault(); if (clientparent == null) { ParentId = 0; } else { ParentId = clientparent.id; } var htClientType = new Hashtable(); foreach (var clientType in Enum.GetValues(typeof(ClientTypeEnum))) { htClientType.Add(Enum.GetName(typeof(ClientTypeEnum), clientType), clientType); } //ClientType = string.IsNullOrEmpty(ClientType) || htClientType[ClientType] == null ? null : ClientType; if (string.IsNullOrEmpty(ClientType)) { ClientType = string.Empty; } else if (htClientType[ClientType] == null) { ClientType = "error"; } if (InstitutionalAttributes != "不适用") { var htInstitutionalAttributes = new Hashtable(); foreach (var institutionalAttributes in Enum.GetValues(typeof(InstitutionalAttributesEnum))) { htInstitutionalAttributes.Add(Enum.GetName(typeof(InstitutionalAttributesEnum), institutionalAttributes), institutionalAttributes); } //InstitutionalAttributes = string.IsNullOrEmpty(InstitutionalAttributes) || htInstitutionalAttributes[InstitutionalAttributes] == null ? null : InstitutionalAttributes; if (string.IsNullOrEmpty(InstitutionalAttributes)) { InstitutionalAttributes = string.Empty; } else if (htInstitutionalAttributes[InstitutionalAttributes] == null) { InstitutionalAttributes = "error"; } } var htLicenseType = new Hashtable(); foreach (var licenseType in Enum.GetValues(typeof(LicenseTypeEnum))) { htLicenseType.Add(Enum.GetName(typeof(LicenseTypeEnum), licenseType), licenseType); } LicenseType = string.IsNullOrEmpty(LicenseType) || htLicenseType[LicenseType] == null ? null : LicenseType; var htProperClientClass = new Hashtable(); foreach (var properClientClass in Enum.GetValues(typeof(ProperClientClassEnum))) { htProperClientClass.Add(Enum.GetName(typeof(ProperClientClassEnum), properClientClass), properClientClass); } ProperClientClass = string.IsNullOrEmpty(ProperClientClass) || htProperClientClass[ProperClientClass] == null ? null : ProperClientClass; var htInvestorType = new Hashtable(); foreach (var investorType in Enum.GetValues(typeof(InvestorTypeEnum))) { htInvestorType.Add(Enum.GetName(typeof(InvestorTypeEnum), investorType), investorType); } if (string.IsNullOrEmpty(InvestorTypeName)) { InvestorType = null; } else if (htInvestorType[InvestorTypeName] == null && !string.IsNullOrEmpty(InvestorTypeName)) { return "第" + rowNum + "行投资者类型" + InvestorTypeName + "不合法,导入失败"; } else { InvestorType = (int)htInvestorType[InvestorTypeName]; } var htBadFaithRecord = new Hashtable(); foreach (var badFaithRecord in Enum.GetValues(typeof(BadFaithRecordEnum))) { htBadFaithRecord.Add(Enum.GetName(typeof(BadFaithRecordEnum), badFaithRecord), badFaithRecord); } if (string.IsNullOrEmpty(BadFaithRecordName)) { BadFaithRecord = null; } else if (htBadFaithRecord[BadFaithRecordName] == null && !string.IsNullOrEmpty(BadFaithRecordName)) { return "第" + rowNum + "行不良诚信记录" + BadFaithRecordName + "不合法,导入失败"; } else { BadFaithRecord = (int)htBadFaithRecord[BadFaithRecordName]; } var htFundsSource = new Hashtable(); foreach (var fundsSource in Enum.GetValues(typeof(FundsSourceEnum))) { htFundsSource.Add(Enum.GetName(typeof(FundsSourceEnum), fundsSource), fundsSource); } if (string.IsNullOrEmpty(FundsSourceName)) { FundsSource = null; } else if (htFundsSource[FundsSourceName] == null && !string.IsNullOrEmpty(FundsSourceName)) { return "第" + rowNum + "行资金来源" + FundsSourceName + "不合法,导入失败"; } else { FundsSource = (int)htFundsSource[FundsSourceName]; } var htRiskServiceDegree = new Hashtable(); foreach (var riskServiceDegree in Enum.GetValues(typeof(RiskServiceDegreeEnum))) { htRiskServiceDegree.Add(Enum.GetName(typeof(RiskServiceDegreeEnum), riskServiceDegree), riskServiceDegree); } if (string.IsNullOrEmpty(RiskServiceDegreeName)) { RiskServiceDegree = 1; } else if (htRiskServiceDegree[RiskServiceDegreeName] == null && !string.IsNullOrEmpty(RiskServiceDegreeName)) { return "第" + rowNum + "行可接受风险服务" + RiskServiceDegreeName + "不合法,导入失败"; } else { RiskServiceDegree = (int)htRiskServiceDegree[RiskServiceDegreeName]; } var htInvestmentTerm = new Hashtable(); foreach (var investmentTerm in Enum.GetValues(typeof(InvestmentTermEnum))) { htInvestmentTerm.Add(EnumHelper.GetDescriptionByName(investmentTerm), investmentTerm); } if (string.IsNullOrEmpty(InvestmentTermName)) { InvestmentTerm = null; } else if (htInvestmentTerm[InvestmentTermName] == null && !string.IsNullOrEmpty(InvestmentTermName)) { return "第" + rowNum + "行投资期限" + InvestmentTermName + "不合法,导入失败"; } else { InvestmentTerm = (int)htInvestmentTerm[InvestmentTermName]; } if (string.IsNullOrEmpty(ExpectedReturnName)) { ExpectedReturnName = null; } else { var query = from d in basedb.Dictionaries join di in basedb.DictionaryItems on d.Id equals di.DictId where d.Name == "期望收益" && di.Name == ExpectedReturnName select di; if (!query.Any()) { return "第" + rowNum + "行期望收益" + ExpectedReturnName + "不合法,导入失败"; } } if (string.IsNullOrEmpty(ProtocolSignVersion)) { ProtocolSignVersion = null; } else { var protocolVersionQuery = from d in basedb.Dictionaries join di in basedb.DictionaryItems on d.Id equals di.DictId where d.Name == "协议签署版本" && di.Name == ProtocolSignVersion select di; if (!protocolVersionQuery.Any()) { return "第" + rowNum + "行协议签署版本" + ProtocolSignVersion + "不合法,导入失败"; } } var htTransactionTarget = new Hashtable(); foreach (var transactionTarget in Enum.GetValues(typeof(TransactionTargetEnum))) { htTransactionTarget.Add(Enum.GetName(typeof(TransactionTargetEnum), transactionTarget), transactionTarget); } var TransactionTargetList = (TransactionTarget ?? string.Empty).Split(',').ToList(); if (!string.IsNullOrEmpty(TransactionTarget) && TransactionTargetList.Any(x => htTransactionTarget[x] == null)) { return "第" + rowNum + "行交易目的" + TransactionTarget + "不合法,导入失败"; } else { TransactionTarget = string.IsNullOrEmpty(TransactionTarget) ? null : TransactionTarget; } var htDerivativesInvestmentVarieties = new Hashtable(); foreach (var derivativesInvestmentVarieties in Enum.GetValues(typeof(DerivativesInvestmentVarietiesEnum))) { htDerivativesInvestmentVarieties.Add(Enum.GetName(typeof(DerivativesInvestmentVarietiesEnum), derivativesInvestmentVarieties), derivativesInvestmentVarieties); } var DerivativesInvestmentVarietiesList = (DerivativesInvestmentVarieties ?? string.Empty).Split(',').ToList(); if (!string.IsNullOrEmpty(DerivativesInvestmentVarieties) && DerivativesInvestmentVarietiesList.Any(x => htDerivativesInvestmentVarieties[x] == null)) { return "第" + rowNum + "行交易种类" + DerivativesInvestmentVarieties + "不合法,导入失败"; } else { DerivativesInvestmentVarieties = string.IsNullOrEmpty(DerivativesInvestmentVarieties) ? null : string.Join(",", DerivativesInvestmentVarietiesList.Select(x => (int)htDerivativesInvestmentVarieties[x])); } //客户编号唯一验证 if (!string.IsNullOrWhiteSpace(Number) && (DbContext.client.Any(a => a.Number != null && a.Number.Equals(Number)) || cList.Any(a => a.Number != null && a.Number.Equals(Number)))) { return "第" + rowNum + "行编号" + Number + "已存在,导入失败"; } //客户名称唯一验证 if (!string.IsNullOrWhiteSpace(Name) && (DbContext.client.Any(a => a.Name.Equals(Name)) || cList.Any(a => a.Name.Equals(Name)))) { return "第" + rowNum + "行客户名称" + Name + "已存在,导入失败"; } //客户代码唯一验证 if (!string.IsNullOrWhiteSpace(Code) && (DbContext.client.Any(a => a.Code.Equals(Code)) || cList.Any(a => a.Code.Equals(Code)))) { return "第" + rowNum + "行客户代码" + Code + "已存在,导入失败"; } //默认登录名唯一验证 if (!string.IsNullOrWhiteSpace(DefaultLoginName) && (DbContext.client.Any(a => a.DefaultLoginName.Equals(DefaultLoginName)) || cList.Any(a => a.DefaultLoginName.Equals(DefaultLoginName)))) { return "第" + rowNum + "行默认登录名" + DefaultLoginName + "已存在,导入失败"; } if (!string.IsNullOrWhiteSpace(LicenseValidTimeStr)) { if (LicenseValidTimeStr == "长期有效") { LicenseValidTimeStr = "30001231"; } else { if (DateTime.TryParse(LicenseValidTimeStr, out DateTime licenseValidTime) || DateTime.TryParseExact(LicenseValidTimeStr, "dd-MM月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out licenseValidTime) || DateTime.TryParseExact(LicenseValidTimeStr, "dd-M月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out licenseValidTime)) { LicenseValidTimeStr = licenseValidTime.ToString(); } else { return "第" + rowNum + "行企业营业执照有效期" + LicenseValidTimeStr + "格式错误,导入失败"; } } } if (DbContext.client_black.Any(c => c.Name == Name && ClientBlackApprovalPolicy.EffectiveStates.Contains(c.State))) { return "" + Name + "客户已经存在于黑名单中”"; } //适当性评级导入数据验证 //List AppropriatenessDegreeList = new List() { "C1", "C2", "C3", "C4" }; var app = GetAppropriatenessList(AppropriatenessDegree); if (!string.IsNullOrWhiteSpace(AppropriatenessDegree) && app == null) { return "第" + rowNum + "行适当性评级不存在"; // return "第" + rowNum + "行适当性评级" + Code + "导入存在异常数据,导入失败"; } //必填项验证 var nullColumnName = ""; if (string.IsNullOrWhiteSpace(Name)) { nullColumnName += "客户姓名,"; } //if (CreditRatingId <= 0) //{ // nullColumnName += "资信等级,"; //} //if (string.IsNullOrWhiteSpace(LicenseCode)) //{ // nullColumnName += "证照编号,"; //} if (PS.Config.Company != Configuration.CompanyEnum.中金) { //if (string.IsNullOrWhiteSpace(ActualBeneficiary)) //{ // nullColumnName += "实际受益人,"; //} //if (string.IsNullOrWhiteSpace(ActualController)) //{ // nullColumnName += "实际控制人,"; //} //if (ProtocolSignDate == DateTime.MinValue) //{ // nullColumnName += "协议签署日期,"; //} //if (string.IsNullOrWhiteSpace(PostalAddress)) //{ // nullColumnName += "办公地址,"; //} if (!PS.Config.Is格林大华) { var manager = UserBLL.FirstOrDefault(x => x.Name == CustomerManager); if (string.IsNullOrWhiteSpace(CustomerManager) || manager == null) { //nullColumnName += "客户经理,"; CustomerManagerId = 0; } else { CustomerManagerId = manager.Id; } } else { if (string.IsNullOrWhiteSpace(CustomerManager)) { //nullColumnName += "客户经理,"; CustomerManagerId = 0; } CustomerManagerId = 0; } if (string.IsNullOrWhiteSpace(ClientType)) { ClientType = "机构"; //nullColumnName += "客户类别,"; } else if (ClientType == "error") { nullColumnName += "客户类别,"; } if (string.IsNullOrWhiteSpace(InstitutionalAttributes)) { InstitutionalAttributes = "民营"; //nullColumnName += "机构属性,"; } else if (InstitutionalAttributes == "error") { nullColumnName += "机构属性,"; } //if (string.IsNullOrWhiteSpace(LicenseType)) //{ // nullColumnName += "证照类型,"; //} } else { CustomerManagerId = 0; } if (!string.IsNullOrWhiteSpace(nullColumnName)) { return "第" + rowNum + "行数据" + nullColumnName.Substring(0, nullColumnName.Length - 1) + "未填写正确,导入失败"; } if (PS.Config.ClientElement.IsCreditLimit) { if (IsCreditOnString == "是" || IsCreditOnString == "否") { IsTradeCredit = 1; IsCreditOn = IsCreditOnString == "否" ? 0 : 1; } else if (string.IsNullOrEmpty(IsCreditOnString)) { IsTradeCredit = 1; IsCreditOn = 1; } else { return "第" + rowNum + "行授信" + IsCreditOnString + "格式错误,请输入“是”或者“否”,导入失败"; } } else { if (PS.Config.Company == Configuration.CompanyEnum.中金 && string.IsNullOrWhiteSpace(IsTradeCreditString)) { IsTradeCreditString = "是"; } if (IsTradeCreditString == "是" || IsTradeCreditString == "否") { IsCreditOn = 1; IsTradeCredit = IsTradeCreditString == "否" ? 0 : 1; } else if (string.IsNullOrEmpty(IsTradeCreditString)) { IsCreditOn = 1; IsTradeCredit = 1; } else { return "第" + rowNum + "行期权费授信" + IsTradeCreditString + "格式错误,请输入“是”或者“否”,导入失败"; } } if (IsIndustryConnectVarietyString == "是" || IsIndustryConnectVarietyString == "否") { IsIndustryConnectVariety = IsIndustryConnectVarietyString == "否" ? 0 : 1; } if (IsRealControlString == "是" || IsRealControlString == "否") { IsRealControl = IsRealControlString == "否" ? 0 : 1; } //中粮是否小微企业 if (IsSmallAndMicroEnterprisesString == "是" || IsSmallAndMicroEnterprisesString == "否") { IsSmallAndMicroEnterprises = IsSmallAndMicroEnterprisesString == "否" ? 0 : 1; } if (IsDocShowParen == "是" || IsDocShowParen == "否") { IsDocShowParentName = IsDocShowParen == "否" ? 0 : 1; } if (SamePeerDesc.IsNullOrWhiteSpace()) { SamePeerDesc = "非同业"; } var samePeerDescList = EnumHelper.GetDescriptionsByEnum(typeof(SamePeerEnum)); if (!samePeerDescList.ContainsKey(SamePeerDesc)) { return "第" + rowNum + "行同业/非同业有误,导入失败"; } #region 客户类别,机构属性,客户性质,关联性逻辑判断 if (ClientType == ClientTypeEnum.机构.ToString() && InstitutionalAttributes == "不适用") { return "第" + rowNum + "行客户类别,机构属性关联性质有误,导入失败"; } if ((ClientType == ClientTypeEnum.产品.ToString() || ClientType == ClientTypeEnum.自然人.ToString()) && InstitutionalAttributes != "不适用") { return "第" + rowNum + "行客户类别,机构属性关联性质有误,导入失败"; } if (string.IsNullOrWhiteSpace(SettleCurrency) && PS.Config.Company == Configuration.CompanyEnum.中金) { SettleCurrency = ConsGlobal.Currency.CNY; } var Currency = DbContextFactory.GetYLDbContext().currency.Find(SettleCurrency); if (Currency == null && !string.IsNullOrWhiteSpace(SettleCurrency)) { return "第" + rowNum + "行结算币种未填写正确,导入失败"; } if (string.IsNullOrWhiteSpace(BoundSideStr)) { if ((PS.Config.Company == Configuration.CompanyEnum.中金 || PS.Config.Company == Configuration.CompanyEnum.中粮)) { BoundSideStr = "南向"; } else { BoundSideStr = "无"; } } if (string.IsNullOrWhiteSpace(MarginOptionType)) { MarginOptionType = "单向追保"; } if (!Enum.TryParse(MarginOptionType, out MarginOptionEnum marginOption)) { return "第" + rowNum + "行追保方向,追保方向不存在"; } if (string.IsNullOrWhiteSpace(ClearingAgency)) { ClearingAgency = "交易员方"; } if (!ConsReport.ClearingAgencyMap.ContainsKey(ClearingAgency)) { return "第" + rowNum + "行清算机构不合法"; } #endregion client = new Client { Number = Number, Name = Name, CustomerNature1 = CustomerNature1, CustomerNature2 = CustomerNature2, LevelId = LevelId, Level = Level, LicenseCode = LicenseCode, RegisteredCapital = RegisteredCapital, ActualBeneficiary = ActualBeneficiary, ActualController = ActualController, ProtocolSignDate = ProtocolSignDate, BusinessType = BusinessType, RegisteredAddress = RegisteredAddress, PostalAddress = PostalAddress, InvestorType = InvestorType, BadFaithRecord = BadFaithRecord, IsIndustryConnectVariety = IsIndustryConnectVariety, FundsSource = FundsSource, IsRealControl = IsRealControl, IsSmallAndMicroEnterprises = IsSmallAndMicroEnterprises, TransactionTarget = TransactionTarget, DerivativesInvestmentVarieties = DerivativesInvestmentVarieties, InvestmentTerm = InvestmentTerm, ExpectedReturn2 = ExpectedReturnName, Code = Code, Abbreviation = Abbreviation, DefaultLoginName = DefaultLoginName, ProperClientClass = ProperClientClass, RiskServiceDegree = RiskServiceDegree, ParentId = ParentId, IsDocShowParentName = IsDocShowParentName, NFICode = NFICode, CounterpartyCode = CounterpartyCode, SettlementCurrency = SettleCurrency, BoundSide = (BoundSideEnum)Enum.Parse(typeof(BoundSideEnum), BoundSideStr), Seat = Seat, AgreementBookNo = AgreementBookNo, AgreementBookType = string.IsNullOrWhiteSpace(AgreementBookType) || AgreementBookType == "单向" ? true : false, AppropriatenessDegree = app == null ? null : app.ID, SupProtocolCode = SupProtocolCode, MainProtocolCode = MainProtocolCode, ProtocolSignVersion = ProtocolSignVersion, MarginOptionType = (int)marginOption, ProductName = ProductName, ClearingAgency = ClearingAgency, LicenseValidTimeStr = LicenseValidTimeStr, }; if (ProtocolSignDate == DateTime.MinValue && PS.Config.Company == Configuration.CompanyEnum.中金) { client.ProtocolSignDate = null; } var depart = GetDepartmentByName(SalesDepartment); if (depart != null) { client.SalesDepartmentId = depart.Id; } else if (depart == null && !string.IsNullOrEmpty(SalesDepartment)) { return "第" + rowNum + "行归属营业部不存在,导入失败"; } //销售员 if (!string.IsNullOrWhiteSpace(Seller) && isSellerV2) { var tempArray = Seller.Split(','); if (tempArray.Length <= 1) { tempArray = Seller.Split(','); } var salesmanIds = new SalesModule.SalesmenDataService(OptUser).GetSalesIdByNames(tempArray).Select(o => o.id); if (salesmanIds.Count() == tempArray.Length) { Seller = string.Join(",", salesmanIds); } else { return "第" + rowNum + "行有销售员不存在或已禁用,导入失败"; } } client.Seller = Seller; client.CustomerManager = CustomerManager; client.CustomerManagerId = CustomerManagerId.ToString(); client.ClientType = ClientType; client.InstitutionalAttributes = InstitutionalAttributes; client.LicenseType = LicenseType; client.IsTradeCredit = IsTradeCredit; client.IsCreditOn = IsCreditOn; client.SamePeer = SamePeerDesc.GetEnumByDescription().GetHashCode(); //if (ClientType == ClientTypeEnum.产品.ToString()) //{ // client.Remark = string.IsNullOrWhiteSpace(client.Remark) ? "注:若客户类别为“产品”,则“注册资本”显示为“产品规模”" : client.Remark; //} ///此处判断如果导入excel模板中不填写编号则为null if (client.Number == "") { client.Number = null; } var isClientProcess = yldb.approvalprocess.Where(a => a.processType == "OpenProcess");//判断有没有设置开户审批流程 if (isClientProcess == null) { client.ProcessOrderId = -2; client.ProcessStatus = "已开户"; client.ProcessOptDate = DateTime.Now; } else { client.ProcessStatus = "未提交"; client.ProcessOrderId = 0; client.ProcessOptDate = DateTime.Now; } client.OptId = UserId; client.OptName = UserName; client.OptDate = DateTime.Now; SetDBModelCreator(client); DbContext.client.Add(client); //加入保存的客户信息 用 list client cList.Add(client); } if (cList == null || cList.Count == 0) { return "请确保上传文件数据不为空,导入失败"; } DbContext.SaveChanges(); foreach (var c in cList) { if (c.ProcessStatus == "已开户") { //每一个成功开户的客户(即首次从【开户管理】转到【客户列表】),系统会自动在【资信等级】页面对该客户留下第一条“资信等级”记录, //但是具体等级是什么,适用期限(生效日期、到期日期)是什么,都空着,待风控人员来填写; if (!DbContext.Client_Rating.Any(x => !x.IsDeleted && x.ClientId == c.id)) { var emptyRating = new ClientRating { ClientId = c.id, ClientName = c.Name, ClientNumber = c.Number, Comments = "上传-开户成功生成", OptId = UserId, OptName = UserName, OptDate = DateTime.Now, RatingStartDate = valuedateBLL.ValueDate }; emptyRating.RatingDeadLine = emptyRating.RatingStartDate.Value.AddYears(99); var defaultRating = DbContext.credit_rating.Where(x => x.ValidState == "Valid").FirstOrDefault(); emptyRating.CreditRatingId = defaultRating?.id ?? 0; emptyRating.CreditRatingStr = defaultRating?.CreditName; emptyRating.ProcessStatus = "未审批"; emptyRating.ProcessOrderId = 0; emptyRating.ProcessOptDate = DateTime.Now; DbContext.Client_Rating.Add(emptyRating); DbContext.SaveChanges(); } } DbContext.ClientAuditLog.Add(new ClientAuditLog { ClientId = c.id, OptType = "导入客户", Changes = string.Empty, DataType = "00", OptId = UserId, OptName = UserName, OptDate = DateTime.Now }); if (PS.Config.Company == Configuration.CompanyEnum.中金 && c.ClientType == ClientTypeEnum.产品.ToString()) { if (!string.IsNullOrWhiteSpace(c.ProductName)) { var model = new ClientMeta() { ClientId = c.id, MetaKey = "产品名称" }; model.MetaValue = c.ProductName; SetDBModelOpt(model); DbContext.ClientMeta.Add(model); } } } DbContext.SaveChanges(); yldb.SaveChanges(); return HandleResult.Success; } class AppItem { public int? ID { get; set; } public string Appropriateness { get; set; } } /// /// 根据适用性评级内容获取ID /// /// /// static AppItem GetAppropriatenessList(string appStr) { var signTypes = new List(); using (var basedb = new ErpBaseContext()) { return (from dic in basedb.Dictionaries.Where(o => o.Name == "适当性评级") join items in basedb.DictionaryItems on dic.Id equals items.DictId select new AppItem { Appropriateness = items.Name, ID = items.IndexNum }).ToList().Find(m => m.Appropriateness == appStr); } } private Department GetDepartmentByName(string name) { if (!string.IsNullOrWhiteSpace(name)) { using (var con = new ErpBaseContext()) { return con.Departments.FirstOrDefault(c => c.Name == name); } } return null; } /// /// 从excel文件导入客户联系人 /// public HandleResult UploadClientDutyExcel(Stream stream) { var clientDutys = new ExcelHelper().ExcelToDataTable(stream, null, true); var clientDutyList = new List(); var contactypes = DbContext.contactype.ToList(); var rowNum = 0; for (var i = 0; i < clientDutys.Rows.Count; i++) { rowNum = i + 2; var formatErrorColumn = ""; var Name = ""; int ClientId; var ContactName = ""; var ContactTypeName = ""; var ContactTypeId = ""; var IdCardTypeName = ""; int IdCardType; var IdCardNo = ""; var Email = ""; var IsReceiveEmailString = ""; int IsReceiveEmail; var PhoneNumber = ""; var Fax = ""; var Address = ""; var Remarks = ""; var authorizeEffectiveEndDateStr = ""; DateTime? DeadLine = null; DateTime? AuthorizeEndDate = null; string IdCardEffectiveDateStr = ""; var WexinNo = ""; for (var j = 0; j < clientDutys.Columns.Count; j++) { switch (clientDutys.Columns[j].ColumnName) { case "客户名称": Name = clientDutys.Rows[i][j].ToString(); break; case "姓名": ContactName = clientDutys.Rows[i][j].ToString(); break; case "职责类型": ContactTypeName = clientDutys.Rows[i][j].ToString(); break; case "证件类型": IdCardTypeName = clientDutys.Rows[i][j].ToString(); break; case "证件号码": IdCardNo = clientDutys.Rows[i][j].ToString(); break; case "电子邮箱": Email = clientDutys.Rows[i][j].ToString(); break; case "是否接收相关邮件": IsReceiveEmailString = clientDutys.Rows[i][j].ToString(); break; case "联系电话": PhoneNumber = clientDutys.Rows[i][j].ToString(); break; case "传真": Fax = clientDutys.Rows[i][j].ToString(); break; case "联系地址": Address = clientDutys.Rows[i][j].ToString(); break; case "备注": Remarks = clientDutys.Rows[i][j].ToString(); break; case "证件到期日": if (!string.IsNullOrEmpty(clientDutys.Rows[i][j].ToString())) { if (DateTime.TryParse(clientDutys.Rows[i][j].ToString(), out var deadLineDate)) { DeadLine = deadLineDate; } else { formatErrorColumn += "证件到期日,"; } } break; case "证件有效日期": if (!string.IsNullOrEmpty(clientDutys.Rows[i][j].ToString())) { IdCardEffectiveDateStr = clientDutys.Rows[i][j].ToString(); } break; case "授权到期日": if (!string.IsNullOrEmpty(clientDutys.Rows[i][j].ToString())) { if (DateTime.TryParse(clientDutys.Rows[i][j].ToString(), out var authorizeEndDate)) { AuthorizeEndDate = authorizeEndDate; } else { formatErrorColumn += "授权到期日,"; } } break; case "授权有效期": if (!string.IsNullOrEmpty(clientDutys.Rows[i][j].ToString())) { if (clientDutys.Rows[i][j].ToString() == "长期有效") { authorizeEffectiveEndDateStr = "30001231"; } else { if (DateTime.TryParse(clientDutys.Rows[i][j].ToString(), out DateTime authorizeEfEndDate)) { authorizeEffectiveEndDateStr = authorizeEfEndDate.ToString("yyyyMMdd"); } else { formatErrorColumn += "授权有效期,"; } } } break; case "微信号": WexinNo = clientDutys.Rows[i][j].ToString(); break; default: break; } } //必填项验证 var nullColumnName = ""; if (string.IsNullOrWhiteSpace(Name)) { nullColumnName += "客户名称,"; } if (string.IsNullOrWhiteSpace(ContactName)) { nullColumnName += "姓名,"; } if (string.IsNullOrWhiteSpace(ContactTypeName)) { nullColumnName += "职责类型,"; } if (!string.IsNullOrWhiteSpace(nullColumnName)) { return "第" + rowNum + "行数据" + nullColumnName.Substring(0, nullColumnName.Length - 1) + "为必填项,导入失败"; } if (!string.IsNullOrWhiteSpace(formatErrorColumn)) { return "第" + rowNum + "行数据" + formatErrorColumn.Substring(0, formatErrorColumn.Length - 1) + "格式不正确,导入失败"; } if (!string.IsNullOrWhiteSpace(IdCardEffectiveDateStr)) { if (IdCardEffectiveDateStr == "长期有效") { IdCardEffectiveDateStr = "30001231"; } else { if (DateTime.TryParse(IdCardEffectiveDateStr, out DateTime IdCardEffectiveDate) || DateTime.TryParseExact(IdCardEffectiveDateStr, "dd-MM月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out IdCardEffectiveDate) || DateTime.TryParseExact(IdCardEffectiveDateStr, "dd-M月-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out IdCardEffectiveDate)) { IdCardEffectiveDateStr = IdCardEffectiveDate.ToString(); } else { return "第" + rowNum + "证件有效日期" + IdCardEffectiveDateStr + "格式错误,导入失败"; } } } var client = DbContext.client.FirstOrDefault(x => x.Name == Name); if (client == null) { return "第" + rowNum + "行客户名称不存在,导入失败"; } else { ClientId = client.id; } var ContactTypeList = (ContactTypeName ?? string.Empty).Split(',').ToList(); if (ContactTypeList.Count > 0 && ContactTypeList.Any(x => !contactypes.Select(y => y.ContactType).Contains(x))) { return "第" + rowNum + "行职责类型:" + ContactTypeName + "不合法,导入失败"; } else { var contactTypeIds = contactypes.Where(x => ContactTypeList.Contains(x.ContactType)).Select(x => x.id); ContactTypeId = ContactTypeList.Count > 0 ? string.Join(",", contactTypeIds) : null; } var htIdCardType = new Hashtable(); if (string.IsNullOrWhiteSpace(IdCardTypeName)) { IdCardType = 0; } else { foreach (var idCardType in Enum.GetValues(typeof(IdCardTypeEnum))) { htIdCardType.Add(Enum.GetName(typeof(IdCardTypeEnum), idCardType), idCardType); } IdCardType = htIdCardType[IdCardTypeName] == null ? 0 : (int)htIdCardType[IdCardTypeName]; if (IdCardType == 0) { return "第" + rowNum + "行证件类型:" + IdCardTypeName + "不合法,导入失败"; } } //默认为1 IsReceiveEmail = 1; if (DbContext.client_black.Any(c => c.Name == Name && ClientBlackApprovalPolicy.EffectiveStates.Contains(c.State))) { return "" + Name + "客户已经存在于黑名单中"; } var clientDuty = new ClientDuty() { ClientId = ClientId, ContactName = ContactName, ContactTypeId = ContactTypeId, IdCardType = IdCardType, IdCardNo = IdCardNo, Email = Email, IsReceiveEmail = IsReceiveEmail, PhoneNumber = PhoneNumber, Fax = Fax, Address = Address, Remarks = Remarks, DeadLine = DeadLine, IdCardEffectiveDateStr = IdCardEffectiveDateStr, AuthorizeEndDate = AuthorizeEndDate, Weixin = WexinNo, ApprovalOrder = 0, AuthorizeEffectiveEndDateStr=authorizeEffectiveEndDateStr }; var contactypelist = DbContext.contactype.ToList(); foreach (var contactType in clientDuty.ContactTypeIdsInt) { //针对法人,授权协议签署人才做唯一性判断,有效期结束后可新增 if (contactType == contactypelist.FirstOrDefault(x => x.ContactType == "法人")?.id || (contactType == contactypelist.FirstOrDefault(x => x.ContactType == "授权协议签署人")?.id && PS.Config.Company == Configuration.CompanyEnum.国泰君安)) { if (DbContext.clientduty.FirstOrDefault(x => x.ApprovalOrder < 1 && x.ClientId == clientDuty.ClientId && x.ContactTypeId.Contains(contactType.ToString()) && (x.DeadLine >= DateTime.Now || !x.DeadLine.HasValue)) != null || clientDutyList.FirstOrDefault(x => x.ClientId == clientDuty.ClientId && x.ContactTypeId.Contains(contactType.ToString()) && (x.DeadLine >= DateTime.Now || !x.DeadLine.HasValue)) != null) { return "第" + rowNum + "行:" + ContactTypeId + "不合法,法人在有效期内必须唯一,授权协议签署人必须唯一,导入失败"; } } } clientDutyList.Add(clientDuty); var processlist = yldb.approvalprocess.Where(x => x.processType == "ClientProcess"); if (processlist.Count() > 0 && client.ProcessStatus == "已开户" && PS.Config.Company == Configuration.CompanyEnum.国联) { clientDuty.ApprovalOrder = (int)ApprovalOrderEnum.导入; var groupId = UserBLL.GetApprovalProcessGroup(UserId); bool approvalBranch = processlist.Any(x => x.approvalGroupId != 0);//审批流程有分支情况 client.ProcessOrderBranch = 0; client.ApprovalOrderId = ProcessTradeLog.审批中; client.ApprovalStatus = "审批中"; client.ApprovalOptDate = DateTime.Now; if (approvalBranch)//审批流程有分支情况 { //该审批组属于流程的审批组或该审批组不属于流程审批组 var tradeProessBranchQuery = processlist.FirstOrDefault(x => (x.approvalGroupId == groupId && x.approvalCondition == 1) || (x.approvalGroupId != groupId && x.approvalCondition == 2)); if (tradeProessBranchQuery == null)//都没有情况 { throw new ServiceException("当前存在分支开户审批流程,检测到申请人不满足任意一个分支进入条件,无法提交审批,请更换申请人或调整审批组"); } client.ApprovalOrderId = tradeProessBranchQuery.order > 1 ? 1 : tradeProessBranchQuery.order + 1;//第一个节点是分支需要跳过审批组那一级 client.ProcessOrderBranch = tradeProessBranchQuery.node ?? 1;//审批组分支 } var range = DbContext.client_file_audit.Where(x => x.ClientId == client.id).ToList(); DbContext.client_file_audit.RemoveRange(range); var clientAuditlog = new ClientAuditLog { ClientId = client.id, OptType = "提交信息变更审批", DataType = "00", OptId = UserId, OptName = UserName, OptDate = DateTime.Now }; ///日志记录 DbContext.ClientAuditLog.Add(clientAuditlog); DbContext.SaveChanges(); client.ApprovalLogId = clientAuditlog.id; } else { DbContext.ClientAuditLog.Add(new ClientAuditLog { ClientId = ClientId, OptType = "导入人员信息", Changes = string.Empty, DataType = "00", OptId = UserId, OptName = UserName, OptDate = DateTime.Now }); } DbContext.clientduty.Add(clientDuty); } DbContext.SaveChanges(); return HandleResult.Success; } /// /// 从excel文件导入银行卡 /// public HandleResult UploadClientBankcardExcel(Stream stream, int userId, string userName) { var clientBankcards = new ExcelHelper().ExcelToDataTable(stream, null, true); var bankcardList = new List(); var Name = ""; var Bank = ""; var Card = ""; var ClientName = ""; var ValidState = ""; var Comments = ""; var Payment = ""; int ClientId; var Use = ""; var rowNum = 0; for (var i = 0; i < clientBankcards.Rows.Count; i++) { rowNum = i + 2; for (var j = 0; j < clientBankcards.Columns.Count; j++) { switch (clientBankcards.Columns[j].ColumnName) { case "客户名称": Name = clientBankcards.Rows[i][j].ToString(); break; case "开户行": Bank = clientBankcards.Rows[i][j].ToString(); break; case "账号": Card = clientBankcards.Rows[i][j].ToString(); break; case "户名": ClientName = clientBankcards.Rows[i][j].ToString(); break; case "大额行号": Payment = clientBankcards.Rows[i][j].ToString(); break; case "用途": Use = clientBankcards.Rows[i][j].ToString(); break; case "是否有效": ValidState = clientBankcards.Rows[i][j].ToString(); break; case "备注": Comments = clientBankcards.Rows[i][j].ToString(); break; default: break; } } //必填项验证 //必填项验证 var nullColumnName = ""; if (string.IsNullOrWhiteSpace(Name)) { nullColumnName += "客户名称,"; } if (string.IsNullOrWhiteSpace(Bank)) { nullColumnName += "开户行,"; } if (string.IsNullOrWhiteSpace(Card)) { nullColumnName += "账号,"; } if (string.IsNullOrWhiteSpace(ClientName)) { nullColumnName += "户名,"; } if (string.IsNullOrWhiteSpace(ValidState)) { nullColumnName += "是否有效,"; } if (!string.IsNullOrWhiteSpace(nullColumnName)) { return "第" + rowNum + "行数据" + nullColumnName.Substring(0, nullColumnName.Length - 1) + "为必填项,导入失败"; } if (!string.IsNullOrWhiteSpace(Use)) { var yldic = DictionaryBLL.GetDictionaryItems("资金用途"); if (!yldic.Where(x => x.Name == Use).Any() && Use != "全部") { return "第" + rowNum + "行数据的用途字段的值,不是系统预设的有效值,请重新导入"; } } else { Use = "全部"; } var client = DbContext.client.Where(x => x.Name == Name).FirstOrDefault(); if (client == null) { return "第" + rowNum + "行客户名称不存在,导入失败"; } else { ClientId = client.id; } if (ValidState == "是") { ValidState = "Valid"; } else if (!string.IsNullOrEmpty(ValidState) && ValidState != "否") { return "第" + rowNum + "行是否有效:" + ValidState + "不合法,导入失败"; } else { ValidState = "InValid"; } var bankcard = new ClientBankCard() { ClientId = ClientId, ClientName = ClientName, Bank = Bank, Card = Card.Replace(" ", ""), Payment = Payment, ValidState = ValidState, Comments = Comments, Use = Use, OptDate = DateTime.Now, OptId = userId, OptName = userName, ApprovalOrder = (int)ApprovalOrderEnum.无需审批 }; if (DbContext.bankcard.Any(o => o.ApprovalOrder < 1 && o.Bank == bankcard.Bank && o.ClientId == bankcard.ClientId && o.Card == bankcard.Card && o.ValidState != "InValid") || bankcardList.Any(o => o.Bank == bankcard.Bank && o.ClientId == bankcard.ClientId && o.Card == bankcard.Card && o.ValidState != "InValid")) { return "第" + rowNum + "行银行卡号:" + "一个客户下不能存在多个有效地重复银行卡号"; } bankcardList.Add(bankcard); var processlist = yldb.approvalprocess.Where(x => x.processType == "ClientProcess"); if (processlist.Count() > 0 && client.ProcessStatus == "已开户") { bankcard.ApprovalOrder = (int)ApprovalOrderEnum.导入; var groupId = UserBLL.GetApprovalProcessGroup(UserId); bool approvalBranch = processlist.Any(x => x.approvalGroupId != 0);//审批流程有分支情况 client.ProcessOrderBranch = 0; client.ApprovalOrderId = ProcessTradeLog.审批中; client.ApprovalStatus = "审批中"; client.ApprovalOptDate = DateTime.Now; if (approvalBranch)//审批流程有分支情况 { //该审批组属于流程的审批组或该审批组不属于流程审批组 var tradeProessBranchQuery = processlist.FirstOrDefault(x => (x.approvalGroupId == groupId && x.approvalCondition == 1) || (x.approvalGroupId != groupId && x.approvalCondition == 2)); if (tradeProessBranchQuery == null)//都没有情况 { throw new ServiceException("当前存在分支开户审批流程,检测到申请人不满足任意一个分支进入条件,无法提交审批,请更换申请人或调整审批组"); } client.ApprovalOrderId = tradeProessBranchQuery.order > 1 ? 1 : tradeProessBranchQuery.order + 1;//第一个节点是分支需要跳过审批组那一级 client.ProcessOrderBranch = tradeProessBranchQuery.node ?? 1;//审批组分支 } var range = DbContext.client_file_audit.Where(x => x.ClientId == client.id).ToList(); DbContext.client_file_audit.RemoveRange(range); var clientAuditlog = new ClientAuditLog { ClientId = client.id, OptType = "提交信息变更审批", DataType = "00", OptId = UserId, OptName = UserName, OptDate = DateTime.Now }; ///日志记录 DbContext.ClientAuditLog.Add(clientAuditlog); DbContext.SaveChanges(); client.ApprovalLogId = clientAuditlog.id; } else { DbContext.ClientAuditLog.Add(new ClientAuditLog { ClientId = ClientId, OptType = "导入银行卡", Changes = string.Empty, DataType = "00", OptId = UserId, OptName = UserName, OptDate = DateTime.Now }); } DbContext.bankcard.Add(bankcard); } DbContext.SaveChanges(); return HandleResult.Success; } public DongGuanClientImportResult ImportDongGuanClient(Stream streamIn) { var readResult = ReadDongGuanData(streamIn); if (readResult.clientModel == null) { return new DongGuanClientImportResult { ResultSet = readResult.dataSet, ResultMsg = "未读取到任何导入数据" }; } if (readResult.hasError) { return new DongGuanClientImportResult { ResultSet = readResult.dataSet, ResultMsg = readResult.errorMsg }; } else { return new DongGuanClientImportResult { ResultSet = readResult.dataSet, ResultMsg = "导入成功" }; } //var sqlBuilderList = new List(10) { new StringBuilder(5200) }; //var tableName = DbContext.GetTableName(); //var result = new DongGuanClientImportResult { ResultSet = readResult.dataSet ,ResultMsg = readResult.errorMsg}; //using (var trans = BeginTransaction()) //{ // foreach (var sb in sqlBuilderList) // { // var sql = sb.ToString(); // if (sql.Length > 0) // { // var changes1 = DbContext.Database.ExecuteSqlRaw(sql); // } // } // result.SuccessSum = DbContext.SaveChanges(); // UpdateUnderlyingMaringParams(ValueDate); // trans.Commit(); //} //return result; } public ReadResult ReadDongGuanData(Stream streamIn) { streamIn.Position = 0; var ds = Office.ExcelHelper.ReadExcelAsDataSet(streamIn); var readResult = new ReadResult { dataSet = ds }; var uniqSet = new HashSet(StringComparer.OrdinalIgnoreCase); foreach (DataTable dt in ds.Tables) { ClientModel clientModle = null; BusinessEiskFactorsModel businessEiskFactorsModel = null; List clientDutylist = null; switch (dt.TableName) { case "基本信息": clientModle = readResult.clientModel; GetClientByTable(dt, clientModle); break; case "主要人员": case "授权办理业务人员": case "受益所有人": case "股东、董事会成员": clientDutylist = readResult.clientDutyModels; GetClientDutyByTable(dt, clientDutylist); break; case "业务风险因素": businessEiskFactorsModel = readResult.businessEiskFactorsModel; GetBusinessEiskFactorsByTable(dt, businessEiskFactorsModel); break; default: continue; } } CheckClientInfo(readResult); if (readResult.errorMsg == null && !readResult.hasError) { HandleClientData(readResult); SaveClient(readResult); } return readResult; } /// /// 导入人员信息 一个人一个职务所以需要数据处理, 处理成 同一人员多个职务 和一些赋值问题 , /// /// private void HandleClientData(ReadResult readResult) { if (readResult.clientDutyModels != null && readResult.clientDutyModels.Any()) { var dutyModelsNotHasNumberOrName = new List(); var listHasShareholder = readResult.clientDutyModels.Where(l => l.DtName == "股东、董事会成员"); var listHasShareholderCardNumber = listHasShareholder.Where(l => !string.IsNullOrWhiteSpace(l.IdCardNumber)).Select(l => l.IdCardNumber).ToList(); //处理股东、董事会成员 填写IdCardNumber 就用IdCardNumber查找 同一个人多个职务处理赋值 var listNotHasShareholder = readResult.clientDutyModels.Where(l => l.DtName != "股东、董事会成员"); if (listHasShareholder != null && listHasShareholder.Any()) { //处理股东、董事会成员 没填写IdCardNumber 就用ContactName查找 同一个人多个职务处理赋值 var listHasIdCardNumberNotValue = listHasShareholder.Where(l => string.IsNullOrWhiteSpace(l.IdCardNumber)); if (listHasIdCardNumberNotValue != null && listHasIdCardNumberNotValue.Any()) { foreach (var item in listHasIdCardNumberNotValue) { var listPersonnelTypeByName = readResult.clientDutyModels.Where(l => l.ContactName == item.ContactName); if (listPersonnelTypeByName != null && listPersonnelTypeByName.Any()) { item.PersonnelTypeIds = String.Join(',', listPersonnelTypeByName.Select(l => l.PersonnelTypeIds).ToList()) + (String.IsNullOrEmpty(item.PersonnelTypeIds) ? "" : "," + item.PersonnelTypeIds); item.PersonnelTypeStr = String.Join(',', listPersonnelTypeByName.Select(l => l.PersonnelTypeStr).ToList()) + (String.IsNullOrEmpty(item.PersonnelTypeStr) ? "" : "," + item.PersonnelTypeStr); ClientDutyModel personnelTypeByNameFirst = new ClientDutyModel(); if (listPersonnelTypeByName.Where(l => l.DtName != "股东、董事会成员").Any()) { personnelTypeByNameFirst = listPersonnelTypeByName.Where(l => l.DtName != "股东、董事会成员").First(); } else { personnelTypeByNameFirst = listPersonnelTypeByName.First(); } item.IdCardNumber = personnelTypeByNameFirst.IdCardNumber; item.IdCardEffectiveDate = personnelTypeByNameFirst.IdCardEffectiveDate; item.IdCardEffectiveDateStr = personnelTypeByNameFirst.IdCardEffectiveDateStr; item.IdCardStartDate = personnelTypeByNameFirst.IdCardStartDate; item.IdCardStartDateStr = personnelTypeByNameFirst.IdCardStartDateStr; item.Address = personnelTypeByNameFirst.Address; item.AddressNationalityStr = personnelTypeByNameFirst.AddressNationalityStr; item.AddressNationality = personnelTypeByNameFirst.AddressNationality; item.AddressProvince = personnelTypeByNameFirst.AddressProvince; item.AddressCity = personnelTypeByNameFirst.AddressCity; item.IdCardType = personnelTypeByNameFirst.IdCardType; } } } var listShareholderIdHasCardNumber = listHasShareholder.Where(l => !string.IsNullOrWhiteSpace(l.IdCardNumber)); if (listShareholderIdHasCardNumber != null && listShareholderIdHasCardNumber.Any()) { foreach (var item in listShareholderIdHasCardNumber) { var personnelTypeByIdCardNumberList = listNotHasShareholder.Where(l => l.IdCardNumber == item.IdCardNumber).ToList(); if (personnelTypeByIdCardNumberList != null && personnelTypeByIdCardNumberList.Any()) { item.PersonnelTypeIds = String.Join(',', personnelTypeByIdCardNumberList.Select(l => l.PersonnelTypeIds).ToList()) + (String.IsNullOrEmpty(item.PersonnelTypeIds) ? "" : "," + item.PersonnelTypeIds); item.PersonnelTypeStr = String.Join(',', personnelTypeByIdCardNumberList.Select(l => l.PersonnelTypeStr).ToList()) + (String.IsNullOrEmpty(item.PersonnelTypeStr) ? "" : "," + item.PersonnelTypeStr); var personnelTypeByIdCardNumberFirst = personnelTypeByIdCardNumberList.First(); item.IdCardNumber = personnelTypeByIdCardNumberFirst.IdCardNumber; item.IdCardEffectiveDate = personnelTypeByIdCardNumberFirst.IdCardEffectiveDate; item.IdCardEffectiveDateStr = personnelTypeByIdCardNumberFirst.IdCardEffectiveDateStr; item.IdCardStartDate = personnelTypeByIdCardNumberFirst.IdCardStartDate; item.IdCardStartDateStr = personnelTypeByIdCardNumberFirst.IdCardStartDateStr; item.Address = personnelTypeByIdCardNumberFirst.Address; item.AddressNationalityStr = personnelTypeByIdCardNumberFirst.AddressNationalityStr; item.AddressNationality = personnelTypeByIdCardNumberFirst.AddressNationality; item.AddressProvince = personnelTypeByIdCardNumberFirst.AddressProvince; item.AddressCity = personnelTypeByIdCardNumberFirst.AddressCity; item.IdCardType = personnelTypeByIdCardNumberFirst.IdCardType; } } } } var listHasShareholderName = listHasShareholder.Where(l => string.IsNullOrWhiteSpace(l.IdCardNumber)).Select(l => l.ContactName).ToList(); readResult.clientDutyModels.RemoveAll(l => l.DtName != "股东、董事会成员" && (listHasShareholderCardNumber.Contains(l.IdCardNumber) || listHasShareholderName.Contains(l.ContactName))); //处理除股东、董事会成员 其他sheet 同一个人多个职务处理赋值 var clientDutyList = readResult.clientDutyModels.Where(l => !listHasShareholderCardNumber.Contains(l.IdCardNumber)); var clientDutyListGroup = clientDutyList.GroupBy(l => new { l.IdCardNumber,l.ContactName}).Select(l => new { k = l.Key, d = l }); var dutyModels = new List(); if (clientDutyListGroup != null && clientDutyListGroup.Any()) { foreach (var item in clientDutyListGroup) { if (item.d.Count() > 1) { var clientDutys = clientDutyList.Where(l => l.IdCardNumber == item.k.IdCardNumber && l.ContactName == item.k.ContactName); foreach (var c in clientDutys) { c.PersonnelTypeIds = String.Join(',', item.d.Select(l => l.PersonnelTypeIds).ToList()); c.PersonnelTypeStr = String.Join(',', item.d.Select(l => l.PersonnelTypeStr).ToList()); } var clientDutyFirst = clientDutys.FirstOrDefault(); var clientDutyModel = new ClientDutyModel() { Address = clientDutyFirst.Address, AddressCity = clientDutyFirst.AddressCity, AddressNationality = clientDutyFirst.AddressNationality, AddressNationalityStr = clientDutyFirst.AddressNationalityStr, AddressProvince = clientDutyFirst.AddressProvince, ContactName = clientDutyFirst.ContactName, IdCardEffectiveDate = clientDutyFirst.IdCardEffectiveDate, IdCardEffectiveDateStr = clientDutyFirst.IdCardEffectiveDateStr, IdCardNumber = clientDutyFirst.IdCardNumber, IdCardStartDate = clientDutyFirst.IdCardStartDate, IdCardStartDateStr = clientDutyFirst.IdCardStartDateStr, IdCardType = clientDutyFirst.IdCardType, IdCardTypeStr = clientDutyFirst.IdCardTypeStr, IdentityOfTheBoardOfDirectors = clientDutyFirst.IdentityOfTheBoardOfDirectors, IdentityOfTheBoardOfDirectorsStr = clientDutyFirst?.IdentityOfTheBoardOfDirectorsStr, IsShareholder = clientDutyFirst.IsShareholder, IsShareholderStr = clientDutyFirst?.IsShareholderStr, ManagementIdentity = clientDutyFirst.ManagementIdentity, ManagementIdentityStr = clientDutyFirst?.ManagementIdentityStr, PersonnelTypeIds = String.Join(',', item.d.Select(l => l.PersonnelTypeIds).ToList()), PersonnelTypeStr = String.Join(',', item.d.Select(l => l.PersonnelTypeStr).ToList()), ShareholdingByShareholdersRatio = clientDutyFirst.ShareholdingByShareholdersRatio, ShareholdingByShareholdersRatioStr = clientDutyFirst.ShareholdingByShareholdersRatioStr, ShareholdingByShareholdersType = clientDutyFirst.ShareholdingByShareholdersType, ShareholdingByShareholdersTypeStr = clientDutyFirst.ShareholdingByShareholdersTypeStr, }; dutyModels.Add(clientDutyModel); } } } if (dutyModels != null && dutyModels.Any()) { readResult.clientDutyModels.AddRange(dutyModels); } foreach (var item in readResult.clientDutyModels) { HashSet listp = item.PersonnelTypeIds.Split(',').ToHashSet(); HashSet listpId = item.PersonnelTypeIds.Split(',').ToHashSet(); item.PersonnelTypeIds = string.Join(",", listpId); item.PersonnelTypeStr = string.Join(",", listp); } if (dutyModels != null && dutyModels.Any()) { List clientDuties = new List(); var dutys = readResult.clientDutyModels.GroupBy(l => new { l.IdCardNumber, l.ContactName }).ToDictionary(l => l.Key, l => l.ToList()); foreach (var d in dutys) { if (d.Value.Count > 1) { if (d.Value.Where(l => l.DtName == "股东、董事会成员").Any()) { clientDuties.Add(d.Value.Where(l => l.DtName == "股东、董事会成员").First()); } else { clientDuties.Add(d.Value.First()); } } else { clientDuties.AddRange(d.Value); } } readResult.clientDutyModels.Clear(); readResult.clientDutyModels.AddRange(clientDuties); } } } private void SaveClient(ReadResult readResult) { var client = new Client() { ClientType = readResult.clientModel.ProductAccountStr, //BusinessType = readResult.clientModel.IndustryStr, Name = readResult.clientModel.ClientName, RegisteredAddress = readResult.clientModel.Address, CounterpartyCode = readResult.clientModel.UnifiedSocialCreditCode, LicenseValidTimeStr = readResult.clientModel.ValidityOfBusinessLicenseStr, RegisteredCapital = readResult.clientModel.RegisteredCapital, Remark = readResult.clientModel.Remarks }; var clientMetas = readResult.metas; new ClientTemplateImportService(UserInfo).SaveClientInfo(client, clientMetas); foreach (var dutyModel in readResult.clientDutyModels) { var clientDuty = new ClientDuty() { ClientId = client.id, ContactName = dutyModel.ContactName, ContactType = dutyModel.PersonnelTypeStr, ContactTypeId = dutyModel.PersonnelTypeIds, Address = dutyModel.Address, IdCardNo = dutyModel.IdCardNumber, IdCardType = dutyModel.IdCardType, //证件有效日期 IdCardEffectiveDateStr = dutyModel.IdCardEffectiveDateStr, //证件起始日期 IdCardStartDate IdCardStartDateStr = dutyModel.IdCardStartDateStr, //管理层身份*(选择) ManagementIdentityStr ManagementIdentity = dutyModel.ManagementIdentity, //是否股东*(选择) IsShareholderStr IsShareholder = dutyModel.IsShareholder, //股东持股类型*(是股东时必选) ShareholdingByShareholdersTypeStr ShareholdingByShareholdersType = dutyModel.ShareholdingByShareholdersType, //股东持股比例*(是股东时必填,0-100,无需写百分号) ShareholdingByShareholdersRatioStr ShareholdingByShareholdersRatio = dutyModel.ShareholdingByShareholdersRatio, //董事会身份 IdentityOfTheBoardOfDirectors = dutyModel.IdentityOfTheBoardOfDirectors, }; new ClientDutyService(OptUser).SaveClientDuty(clientDuty, null); } } private void GetBusinessEiskFactorsByTable(DataTable dt, BusinessEiskFactorsModel businessEiskFactorsModel) { businessEiskFactorsModel.DtName = dt.TableName; for (var i = 0; i < dt.Rows.Count; i++) { switch (dt.Rows[i][0].ToString()) { case "过去三年募集资金使用情况*": businessEiskFactorsModel.Past3YearFundUseStr = dt.Rows[i][1].ToString(); break; case "客户业务异常情况*": businessEiskFactorsModel.BusExcStr = dt.Rows[i][1].ToString(); break; case "客户业务是否涉及跨境交易*": businessEiskFactorsModel.CrossBoderBusStr = dt.Rows[i][1].ToString(); break; case "历史沿革问题*": businessEiskFactorsModel.HisEvoProblemStr = dt.Rows[i][1].ToString(); break; case "股东出资情况*": businessEiskFactorsModel.FundStatusStr = dt.Rows[i][1].ToString(); break; case "资金占用情形*": businessEiskFactorsModel.FundUseStatusStr = dt.Rows[i][1].ToString(); break; default: break; } } } //同客户新增处理 private void GetClientByTable(DataTable dt, ClientModel client) { client.DtName = dt.TableName; for (var i = 0; i < dt.Rows.Count; i++) { switch (dt.Rows[i][0].ToString()) { case "产品户/机构户*": client.ProductAccountStr = dt.Rows[i][1].ToString(); break; case "客户编号*": break; case "客户名称*": client.ClientName = dt.Rows[i][1].ToString(); break; case "项目组*": client.ProjectTeam = dt.Rows[i][1].ToString(); break; case "合作方式*": client.CooperationModeStr = dt.Rows[i][1].ToString(); break; case "合作类型*": client.CooperationTypeStr = dt.Rows[i][1].ToString(); break; case "成立日期*": client.IncorporationDateStr = dt.Rows[i][1].ToString(); break; case "所处行业*": client.IndustryStr = dt.Rows[i][1].ToString(); break; case "经营范围*": client.NatureOfBusiness = dt.Rows[i][1].ToString(); break; case "注册地址*": client.AddressNationalityStr = dt.Rows[i][1].ToString(); client.AddressProvince = dt.Rows[i + 1][1].ToString(); client.AddressCity = dt.Rows[i + 2][1].ToString(); client.AddressDetail = dt.Rows[i + 3][1].ToString(); client.Address = dt.Rows[i][1].ToString() + "-" + dt.Rows[i + 1][1].ToString() + "-" + dt.Rows[i + 2][1].ToString(); break; case "注册资本*": client.RegisteredCapital = dt.Rows[i][1].ToString(); break; case "统一社会信用码*": client.UnifiedSocialCreditCode = dt.Rows[i][1].ToString(); break; case "营业执照有效期*": client.ValidityOfBusinessLicenseStr = dt.Rows[i][1].ToString(); break; case "公司性质*": client.CompanyNatureStr = dt.Rows[i][1].ToString(); break; case "建立业务关系渠道*": client.SourceWayStr = dt.Rows[i][1].ToString(); break; case "近一年资产总额*": client.TotalAssetsInThePastYear = dt.Rows[i][1].ToString(); break; case "近三年是否涉及风险提示或负面报道*": client.HasThereBeenAnyRiskRecentlyStr = dt.Rows[i][1].ToString(); break; case "关联交易是否存在异常*": client.HasTradeExceptionStr = dt.Rows[i][1].ToString(); break; case "本次建立业务时间*": client.BuildBusinessDateStr = dt.Rows[i][1].ToString(); break; case "一年内3次及以上修改基本信息*": client.RecentModificationsInfoStr = dt.Rows[i][1].ToString(); break; case "是否上市公司*": client.IsListedCompanyStr = dt.Rows[i][1].ToString(); break; case "证券代码": client.SecuritiesCode = dt.Rows[i][1].ToString(); break; case "备注": client.Remarks = dt.Rows[i][1].ToString(); break; default: break; } } } private void GetClientDutyByTable(DataTable dt, List dutylist) { for (var i = 2; i < dt.Rows.Count; i++) { var clientDuty = new ClientDutyModel(); clientDuty.DtName = dt.TableName; for (var j = 0; j < dt.Columns.Count; j++) { switch (dt.Rows[0][j].ToString()) { case "人员类型*(选择)": clientDuty.PersonnelTypeStr = dt.Rows[i][j].ToString(); if (clientDuty.PersonnelTypeStr == "控股股东" || clientDuty.PersonnelTypeStr == "控股股东") { clientDuty.IsShareholderStr = "是"; clientDuty.IsShareholder = true; } break; case "姓名*": clientDuty.ContactName = dt.Rows[i][j].ToString(); break; case "所在地址*": clientDuty.AddressNationalityStr = dt.Rows[i][j].ToString(); clientDuty.AddressProvince = dt.Rows[i][j + 1].ToString(); clientDuty.AddressCity = dt.Rows[i][j + 2].ToString(); clientDuty.Address = dt.Rows[i][j].ToString() + "-" + dt.Rows[i][j + 1].ToString() + "-" + dt.Rows[i][j + 2].ToString(); break; case "证件类型(选择)": case "证件类型*(选择)": clientDuty.IdCardTypeStr = dt.Rows[i][j].ToString(); break; case "证件号码": case "证件号码*": clientDuty.IdCardNumber = dt.Rows[i][j].ToString(); break; case "证件起始日期(格式:20201022)": case "证件起始日期*(格式:20201022)": clientDuty.IdCardStartDateStr = dt.Rows[i][j].ToString(); break; case "证件有效期(格式:30001231)": case "证件有效期*(格式:30001231)": clientDuty.IdCardEffectiveDateStr = dt.Rows[i][j].ToString(); break; case "董事会身份*(选择)": clientDuty.IdentityOfTheBoardOfDirectorsStr = dt.Rows[i][j].ToString(); break; case "管理层身份*(选择)": clientDuty.ManagementIdentityStr = dt.Rows[i][j].ToString(); break; case "是否股东*(选择)": clientDuty.IsShareholderStr = dt.Rows[i][j].ToString(); break; case "股东持股类型*(是股东时必选)": clientDuty.ShareholdingByShareholdersTypeStr = dt.Rows[i][j].ToString(); break; case "股东持股比例*(是股东时必填,0-100,无需写百分号)": clientDuty.ShareholdingByShareholdersRatioStr = dt.Rows[i][j].ToString(); break; default: break; } if (dt.TableName == "受益所有人" || dt.TableName == "授权办理业务人员") { clientDuty.PersonnelTypeStr = dt.TableName; } } dutylist.Add(clientDuty); } } public void CheckClientInfo(ReadResult result) { var config = ClientEditConfigService.GetConfig(true); var clientErrorMsg = ""; if (result.clientModel != null) { var client = result.clientModel; if (string.IsNullOrWhiteSpace(client.ProductAccountStr)) { clientErrorMsg += "产品户/机构户:不能为空!"; } else { if (client.ProductAccountStr == "产品户") { client.ProductAccount = (int)ClientTypeEnum.产品; client.ProductAccountStr = "产品"; } else if (client.ProductAccountStr == "机构户") { client.ProductAccount = (int)ClientTypeEnum.机构; client.ProductAccountStr = "机构"; } else { client.ProductAccount = -1; } } if (string.IsNullOrWhiteSpace(client.AddressNationalityStr)) { clientErrorMsg += "注册地址(国家/地区)不能为空!"; } else { CheckClientMate(config, result.metas, "meta_regNationality", "注册地址(国家/地区)", client.AddressNationalityStr, clientErrorMsg); } if (string.IsNullOrWhiteSpace(client.AddressProvince)) { clientErrorMsg += "注册地址(省)不能为空!"; } if (string.IsNullOrWhiteSpace(client.AddressCity)) { clientErrorMsg += "注册地址(市)不能为空!"; } if (string.IsNullOrWhiteSpace(client.AddressDetail)) { clientErrorMsg += "注册地址(详细地址)不能为空!"; } else { AddClientMeta(result.metas, "meta_regAddress", client.AddressDetail, false); } if (string.IsNullOrWhiteSpace(client.ClientName)) { clientErrorMsg += "客户名称不能为空!"; } if (string.IsNullOrWhiteSpace(client.ProjectTeam)) { clientErrorMsg += "项目组不能为空!"; } else { AddClientMeta(result.metas, "meta_groupName", client.ProjectTeam, false); } if (string.IsNullOrWhiteSpace(client.CooperationModeStr)) { clientErrorMsg += "合作方式不能为空!"; } else { CheckClientMate(config, result.metas, "meta_CoopWay", "合作方式", client.CooperationModeStr, clientErrorMsg); } if (string.IsNullOrWhiteSpace(client.CooperationTypeStr)) { clientErrorMsg += "合作类型不能为空!"; } else { CheckClientMate(config, result.metas, "meta_CoopType", "合作类型", client.CooperationTypeStr, clientErrorMsg); } if (string.IsNullOrWhiteSpace(client.IncorporationDateStr)) { clientErrorMsg += "成立日期不能为空!"; } else { var (flag, dt) = CheckDate(client.IncorporationDateStr); if (!flag) { clientErrorMsg += "成立日期格式错误!"; } else { client.IncorporationDate = dt; AddClientMeta(result.metas, "meta_SetupTime", client.IncorporationDateStr, false); } } if (string.IsNullOrWhiteSpace(client.IndustryStr)) { clientErrorMsg += "所处行业不能为空!"; } else { CheckClientMate(config, result.metas, "meta_industry", "所处行业", client.IndustryStr, clientErrorMsg); } if (string.IsNullOrWhiteSpace(client.NatureOfBusiness)) { clientErrorMsg += "经营范围不能为空!"; } else { AddClientMeta(result.metas, "meta_busRange", client.NatureOfBusiness, false); } if (string.IsNullOrWhiteSpace(client.RegisteredCapital)) { clientErrorMsg += "注册资本不能为空!"; } //else //{ // AddClientMeta(result.metas, "meta_SetupCapital", client.RegisteredCapital, false); //} if (string.IsNullOrWhiteSpace(client.ValidityOfBusinessLicenseStr)) { clientErrorMsg += "营业执照有效期不能为空!"; } else { var (flag, dt) = CheckDate(client.ValidityOfBusinessLicenseStr); if (!flag) { clientErrorMsg += "营业执照有效期格式错误!"; } else { client.ValidityOfBusinessLicense = dt; //AddClientMeta(result.metas, "meta_LicenseValidTime", client.ValidityOfBusinessLicenseStr, false); } } if (string.IsNullOrWhiteSpace(client.CompanyNatureStr)) { clientErrorMsg += "公司性质不能为空!"; } else { var (flag, value, text) = GetDicData("公司性质", client.CompanyNatureStr); if (flag) { client.CompanyNature = value; AddClientMeta(result.metas, "meta_CompanyNature", client.CompanyNatureStr, false); } else { clientErrorMsg += "公司性质里面未找到" + client.CompanyNatureStr + "!"; } } if (string.IsNullOrWhiteSpace(client.SourceWayStr)) { clientErrorMsg += "建立业务关系渠道不能为空!"; } else { CheckClientMate(config, result.metas, "meta_SourceWay", "建立业务关系渠道", client.SourceWayStr, clientErrorMsg); } if (string.IsNullOrWhiteSpace(client.TotalAssetsInThePastYear)) { clientErrorMsg += "近一年资产总额不能为空!"; } else { AddClientMeta(result.metas, "meta_AssetsPastYear", client.TotalAssetsInThePastYear, false); } if (string.IsNullOrWhiteSpace(client.HasThereBeenAnyRiskRecentlyStr)) { clientErrorMsg += "近三点是否涉及风险提示或负面报道不能为空!"; } else { client.HasThereBeenAnyRiskRecently = client.HasThereBeenAnyRiskRecentlyStr == "是" ? true : false; AddClientMeta(result.metas, "meta_negaPastTrYears", (Convert.ToInt32(client.HasThereBeenAnyRiskRecently)).ToString(), false); } if (string.IsNullOrWhiteSpace(client.HasTradeExceptionStr)) { clientErrorMsg += "关联交易是否存在异常不能为空!"; } else { client.HasTradeException = client.HasTradeExceptionStr == "是" ? true : false; AddClientMeta(result.metas, "meta_relateDealExc", (Convert.ToInt32(client.HasTradeException)).ToString(), false); } if (string.IsNullOrWhiteSpace(client.BuildBusinessDateStr)) { clientErrorMsg += "本次建立业务时间不能为空!"; } else { var (flag, dt) = CheckDate(client.BuildBusinessDateStr); if (!flag) { clientErrorMsg += "本次建立业务时间格式错误!"; } else { client.BuildBusinessDate = dt; AddClientMeta(result.metas, "meta_currBusTime", client.BuildBusinessDateStr, false); } } if (string.IsNullOrWhiteSpace(client.RecentModificationsInfoStr)) { clientErrorMsg += "一年内3次及以上修改基本信息不能为空!"; } else { client.RecentModificationsInfo = client.RecentModificationsInfoStr == "是" ? true : false; AddClientMeta(result.metas, "meta_updTrTimeInYear", (Convert.ToInt32(client.RecentModificationsInfo)).ToString(), false); } if (string.IsNullOrWhiteSpace(client.IsListedCompanyStr)) { clientErrorMsg += "是否上市公司不能为空!"; } else { client.IsListedCompany = client.IsListedCompanyStr == "是" ? true : false; AddClientMeta(result.metas, "meta_beListed", (Convert.ToInt32(client.IsListedCompany)).ToString(), false); if (string.IsNullOrWhiteSpace(client.SecuritiesCode) && client.IsListedCompany) { clientErrorMsg += "证券代码不能为空!"; } else { AddClientMeta(result.metas, "meta_stockCode", client.SecuritiesCode, false); } } if (!string.IsNullOrWhiteSpace(clientErrorMsg)) { clientErrorMsg = client.DtName + ":" + clientErrorMsg + "\n"; } } var businessEiskFactorsModelErrorMsg = ""; if (result.businessEiskFactorsModel != null) { var businessEiskFactorsModel = result.businessEiskFactorsModel; if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.Past3YearFundUseStr)) { businessEiskFactorsModelErrorMsg += "过去三年募集资金使用情况不能为空!"; } else { CheckClientMate(config, result.metas, "meta_past3yearFundUse", "过去三年募集资金使用情况", businessEiskFactorsModel.Past3YearFundUseStr, businessEiskFactorsModelErrorMsg); } if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.BusExcStr)) { businessEiskFactorsModelErrorMsg += "客户业务异常情况不能为空!"; } else { CheckClientMate(config, result.metas, "meta_busExc", "客户业务异常情况", businessEiskFactorsModel.BusExcStr, businessEiskFactorsModelErrorMsg); } if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.CrossBoderBusStr)) { businessEiskFactorsModelErrorMsg += "客户业务是否涉及跨境交易不能为空!"; } else { businessEiskFactorsModel.CrossBoderBus = businessEiskFactorsModel.CrossBoderBusStr == "是" ? true : false; AddClientMeta(result.metas, "meta_crossBoderBus", (Convert.ToInt32(businessEiskFactorsModel.CrossBoderBus)).ToString(), false); } if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.HisEvoProblemStr)) { businessEiskFactorsModelErrorMsg += "历史沿革问题不能为空!"; } else { CheckClientMate(config, result.metas, "meta_hisEvoProblem", "历史沿革问题", businessEiskFactorsModel.HisEvoProblemStr, businessEiskFactorsModelErrorMsg); } if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.FundStatusStr)) { businessEiskFactorsModelErrorMsg += "股东出资情况不能为空!"; } else { CheckClientMate(config, result.metas, "meta_fundStatus", "股东出资情况", businessEiskFactorsModel.FundStatusStr, businessEiskFactorsModelErrorMsg); } if (string.IsNullOrWhiteSpace(businessEiskFactorsModel.FundUseStatusStr)) { businessEiskFactorsModelErrorMsg += "资金占用情形不能为空!"; } else { CheckClientMate(config, result.metas, "meta_fundUseStatus", "资金占用情形", businessEiskFactorsModel.FundUseStatusStr, businessEiskFactorsModelErrorMsg); } if (!string.IsNullOrWhiteSpace(businessEiskFactorsModelErrorMsg)) { businessEiskFactorsModelErrorMsg = businessEiskFactorsModel.DtName + ":" + businessEiskFactorsModelErrorMsg + "\n"; } } var clientDutysAllErrorMsg = ""; if (result.clientDutyModels != null && result.clientDutyModels.Any()) { var clientDutys = result.clientDutyModels; foreach (var clientDuty in clientDutys) { var clientDutysErrorMsg = ""; if (string.IsNullOrWhiteSpace(clientDuty.ContactName)) { clientDutysErrorMsg += "姓名不能为空!"; } if (clientDuty.DtName != "股东、董事会成员") { if (string.IsNullOrWhiteSpace(clientDuty.PersonnelTypeStr)) { clientDutysErrorMsg += "人员类型不能为空!"; } else { clientDutysErrorMsg = GetPersonnelByName(result, clientDuty, clientDuty.PersonnelTypeStr, clientDutysErrorMsg); } if (string.IsNullOrWhiteSpace(clientDuty.AddressNationalityStr)) { clientDutysErrorMsg += "国家/地区(选择)不能为空!"; } else { clientDuty.AddressNationality = (int)Enum.Parse(typeof(NationalityEnum), clientDuty.AddressNationalityStr); } if (string.IsNullOrWhiteSpace(clientDuty.AddressProvince)) { clientDutysErrorMsg += "省不能为空!"; } if (string.IsNullOrWhiteSpace(clientDuty.AddressCity)) { clientDutysErrorMsg += "市不能为空!"; } if (string.IsNullOrWhiteSpace(clientDuty.IdCardTypeStr)) { clientDutysErrorMsg += "证件类型不能为空!"; } else { clientDuty.IdCardType = (int)Enum.Parse(typeof(IdCardTypeEnum), clientDuty.IdCardTypeStr); } if (string.IsNullOrWhiteSpace(clientDuty.IdCardNumber)) { clientDutysErrorMsg += "证件号码不能为空!"; } if (string.IsNullOrWhiteSpace(clientDuty.IdCardStartDateStr)) { clientDutysErrorMsg += "证件起始日期不能为空!"; } else { var (flag, dt) = CheckDate(clientDuty.IdCardStartDateStr); if (!flag) { clientDutysErrorMsg += "证件起始日期格式错误!"; } else { clientDuty.IdCardStartDate = dt; } } if (string.IsNullOrWhiteSpace(clientDuty.IdCardEffectiveDateStr)) { clientDutysErrorMsg += "证件有效期不能为空!"; } else { var (flag, dt) = CheckDate(clientDuty.IdCardEffectiveDateStr); if (!flag) { clientDutysErrorMsg += "证件有效期格式错误!"; } else { clientDuty.IdCardEffectiveDate = dt; } } } if (clientDuty.DtName == "股东、董事会成员") { if (string.IsNullOrWhiteSpace(clientDuty.IdCardTypeStr)) { clientDuty.IdCardType = 0; } else { clientDuty.IdCardType = (int)Enum.Parse(typeof(IdCardTypeEnum), clientDuty.IdCardTypeStr); } var (flag, dt) = CheckDate(clientDuty.IdCardStartDateStr); if (!flag) { clientDuty.IdCardStartDate = default; } else { clientDuty.IdCardStartDate = dt; } var (flag1, dt1) = CheckDate(clientDuty.IdCardEffectiveDateStr); if (!flag1) { clientDuty.IdCardEffectiveDate = default; } else { clientDuty.IdCardEffectiveDate = dt1; } if (string.IsNullOrWhiteSpace(clientDuty.IdentityOfTheBoardOfDirectorsStr)) { clientDutysErrorMsg += "董事长身份不能为空!"; } else { if (clientDuty.IdentityOfTheBoardOfDirectorsStr != "非董事会成员") { GetPersonnelByName(result, clientDuty, "董事会成员", clientDutysErrorMsg); } clientDuty.IdentityOfTheBoardOfDirectors = (int)Enum.Parse(typeof(IdentityOfTheBoardOfDirectorsEnum), clientDuty.IdentityOfTheBoardOfDirectorsStr); } if (string.IsNullOrWhiteSpace(clientDuty.ManagementIdentityStr)) { clientDutysErrorMsg += "管理层身份不能为空!"; } else { clientDuty.ManagementIdentity = (int)Enum.Parse(typeof(ManagementIdentityEnum), clientDuty.ManagementIdentityStr); } if (string.IsNullOrWhiteSpace(clientDuty.IsShareholderStr)) { clientDutysErrorMsg += "是否股东不能为空!"; } else { clientDuty.IsShareholder = clientDuty.IsShareholderStr == "是" ? true : false; if (clientDuty.IsShareholder) { GetPersonnelByName(result, clientDuty, "普通股东", clientDutysErrorMsg); if (string.IsNullOrWhiteSpace(clientDuty.ShareholdingByShareholdersTypeStr)) { clientDutysErrorMsg += "股东持股类型不能为空!"; } else { clientDuty.ShareholdingByShareholdersType = (int)Enum.Parse(typeof(ShareholdingByShareholdersTypeEnum), clientDuty.ShareholdingByShareholdersTypeStr); } if (string.IsNullOrWhiteSpace(clientDuty.ShareholdingByShareholdersRatioStr) && clientDuty.IsShareholder) { clientDutysErrorMsg += "股东持股比例不能为空!"; } else { if (decimal.TryParse(clientDuty.ShareholdingByShareholdersRatioStr, out var ratio)) { if (ratio < 0 || ratio > 100) { clientDutysErrorMsg += "股东持股比例数值必须大于等于0并且小于等于100!"; } else { clientDuty.ShareholdingByShareholdersRatio = ratio; } } else { clientDutysErrorMsg += "股东持股比例数值格式错误!"; } } } } } if (!string.IsNullOrWhiteSpace(clientDutysErrorMsg)) { clientDutysAllErrorMsg += clientDuty.DtName + ":" + clientDutysErrorMsg + "\n"; } } } if (!string.IsNullOrWhiteSpace(clientDutysAllErrorMsg) || !string.IsNullOrWhiteSpace(clientErrorMsg) || !string.IsNullOrWhiteSpace(businessEiskFactorsModelErrorMsg)) { result.hasError = true; result.errorMsg = clientErrorMsg + clientDutysAllErrorMsg + businessEiskFactorsModelErrorMsg; } } private static string GetPersonnelByName(ReadResult result, ClientDutyModel clientDuty, string NameStr, string clientDutysErrorMsg) { using (var clientDB = DbContextFactory.GetClientDbContext(null)) { var dic = clientDB.contactype.Where(a => !a.ContactType.Equals("产品投资经理")).ToDictionary(n => n.id, m => m.ContactType); if (result.clientModel.ProductAccount == (int)ClientTypeEnum.产品) { dic = clientDB.contactype.ToDictionary(n => n.id, m => m.ContactType); } var contactype = dic.Where(l => l.Value == NameStr); if (contactype.Any()) { clientDuty.PersonnelTypeIds = contactype.First().Key.ToString() + (String.IsNullOrEmpty(clientDuty.PersonnelTypeIds) ? "" : "," + clientDuty.PersonnelTypeIds); clientDuty.PersonnelTypeStr = contactype.First().Value.ToString() + (String.IsNullOrEmpty(clientDuty.PersonnelTypeStr) ? "" : "," + clientDuty.PersonnelTypeStr); } else { clientDutysErrorMsg += "人员类型里面未找到" + NameStr + "!"; } } return clientDutysErrorMsg; } private void CheckClientMate(ClientEditConfig config, List clientMetas, string fieldName, string colName, string cellValue, string msg) { var selectData = new ClientTemplateImportService(UserInfo).GetSelectData(config.selects, fieldName); if (!selectData.Any(a => a == cellValue)) { msg += ($"{colName}选项中没有找到此数据"); } else { AddClientMeta(clientMetas, fieldName, cellValue, true); } } private void AddClientMeta(List clientMetas, string fieldName, string cellValue, bool isSelect) { if (isSelect) { cellValue = ClientEditConfigService.GetSelectValue(fieldName, cellValue); } var clientMeta = new ClientMeta() { MetaKey = fieldName.Split('_')[1], MetaValue = cellValue.ToString(), OptDate = DateTime.Now, OptId = UserId, OptName = UserName }; clientMetas.Add(clientMeta); } public Dictionary GetDicDataByType(string type) { using (var db = new ErpBaseContext()) { return db.Dictionaries.FirstOrDefault(x => x.Name == type) ?? null; } } public (bool, int, string) GetDicData(string type, string str) { var dictionary = GetDicDataByType(type); if (dictionary != null) { using (var db = new ErpBaseContext()) { var dictionaryItem = db.DictionaryItems.FirstOrDefault(x => x.DictId == dictionary.Id && x.Name == str); if (dictionaryItem != null) { return (true, dictionaryItem.Id, dictionaryItem.Name); } else { return (false, 0, ""); } } } else { return (false, 0, ""); } } public (bool, DateTime) CheckDate(string DateStr) { if (DateTime.TryParseExact(DateStr, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out var dateTime)) { return (true, dateTime); } else { return (false, new DateTime()); } } public class ReadResult { public bool hasError; public DataSet dataSet; public string errorMsg; public ClientModel clientModel { get; private set; } public BusinessEiskFactorsModel businessEiskFactorsModel { get; private set; } public List clientDutyModels { get; private set; } public List metas { get; private set; } public ReadResult() { clientModel = new ClientModel(); businessEiskFactorsModel = new BusinessEiskFactorsModel(); clientDutyModels = new List(); metas = new List(); } } public class BusinessEiskFactorsModel { /// /// 表格名称 /// public string DtName { get; set; } /// /// 过去三年募集资金使用情况* /// public string Past3YearFundUseStr { get; set; } /// /// 客户业务异常情况* /// public string BusExcStr { get; set; } /// /// 客户业务是否涉及跨境交易* /// public string CrossBoderBusStr { get; set; } public bool CrossBoderBus { get; set; } /// /// 历史沿革问题* /// public string HisEvoProblemStr { get; set; } /// /// 股东出资情况* /// public string FundStatusStr { get; set; } /// /// 资金占用情形* /// public string FundUseStatusStr { get; set; } } public class ClientModel { /// /// 表格名称 /// public string DtName { get; set; } /// /// 产品户 /// public string ProductAccountStr { get; set; } public int ProductAccount { get; set; } public string ClientName { get; set; } /// /// 项目组 /// public string ProjectTeam { get; set; } /// /// 合作方式 /// public string CooperationModeStr { get; set; } /// /// 合作类型 /// public string CooperationTypeStr { get; set; } /// /// 成立日期 /// public string IncorporationDateStr { get; set; } public DateTime IncorporationDate { get; set; } /// /// 所处行业 /// public string IndustryStr { get; set; } public int Industry { get; set; } /// /// 经营范围 /// public string NatureOfBusiness { get; set; } /// /// 注册地址 /// public string Address { get; set; } /// /// 注册地址 国 /// public string AddressNationalityStr { get; set; } /// /// 注册地址 省 /// public string AddressProvince { get; set; } /// /// 注册地址 市 /// public string AddressCity { get; set; } /// /// 详细地址 /// public string AddressDetail { get; set; } /// /// 注册资本 /// public string RegisteredCapital { get; set; } /// /// 统一社会信用代码 /// public string UnifiedSocialCreditCode { get; set; } /// /// 营业执照有效期 /// public DateTime ValidityOfBusinessLicense { get; set; } /// /// 营业执照有效期 /// public string ValidityOfBusinessLicenseStr { get; set; } /// /// 公司性质 /// public string CompanyNatureStr { get; set; } public int CompanyNature { get; set; } /// /// 建立业务关系渠道 /// public string SourceWayStr { get; set; } /// /// 近一年资产总额 /// public string TotalAssetsInThePastYear { get; set; } /// /// 近三点是否涉及风险提示或负面报道 /// public string HasThereBeenAnyRiskRecentlyStr { get; set; } public bool HasThereBeenAnyRiskRecently { get; set; } /// /// 关联交易是否存在异常* /// public string HasTradeExceptionStr { get; set; } public bool HasTradeException { get; set; } /// /// 本次建立业务时间* /// public string BuildBusinessDateStr { get; set; } /// /// 本次建立业务时间* /// public DateTime BuildBusinessDate { get; set; } /// /// 一年内3次及以上修改基本信息* /// public string RecentModificationsInfoStr { get; set; } public bool RecentModificationsInfo { get; set; } /// /// 是否上市公司 /// public string IsListedCompanyStr { get; set; } public bool IsListedCompany { get; set; } /// /// 证券代码 /// public string SecuritiesCode { get; set; } /// /// 备注 /// public string Remarks { get; set; } } public class ClientDutyModel { /// /// 表格名称 /// public string DtName { get; set; } /// /// ?人员类型 /// public string PersonnelTypeStr { get; set; } public string PersonnelTypeIds { get; set; } public string ContactName { get; set; } public string Address { get; set; } /// /// 注册地址 国 /// public string AddressNationalityStr { get; set; } public int AddressNationality { get; set; } /// /// 注册地址 省 /// public string AddressProvince { get; set; } /// /// 注册地址 市 /// public string AddressCity { get; set; } /// /// ?证件类型 /// public string IdCardTypeStr { get; set; } public int IdCardType { get; set; } public string IdCardNumber { get; set; } public DateTime IdCardStartDate { get; set; } public string IdCardStartDateStr { get; set; } public string IdCardEffectiveDateStr { get; set; } public DateTime IdCardEffectiveDate { get; set; } /// /// 董事会身份 /// public string IdentityOfTheBoardOfDirectorsStr { get; set; } public int IdentityOfTheBoardOfDirectors { get; set; } /// /// 管理层身份 /// public string ManagementIdentityStr { get; set; } public int ManagementIdentity { get; set; } /// /// 是否股东 /// public string IsShareholderStr { get; set; } /// /// 是否股东 /// public bool IsShareholder { get; set; } /// /// 股东持股类型 /// public string ShareholdingByShareholdersTypeStr { get; set; } public int ShareholdingByShareholdersType { get; set; } /// /// 股东持股比例 /// public string ShareholdingByShareholdersRatioStr { get; set; } /// /// 股东持股比例 /// public decimal ShareholdingByShareholdersRatio { get; set; } } } public class DongGuanClientImportResult { public string ResultMsg { get; set; } public DataSet ResultSet { get; set; } } }