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