Files
zszq-trs/YLErpDAL/Modules/ClientModule/ClientImportService.cs
T
2024-05-09 14:06:26 +08:00

3391 lines
156 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// 客户信息导入
/// </summary>
public class ClientImportService : ClientBaseService
{
public ClientImportService(OptUserInfo userInfo) : base(userInfo)
{
}
/// <summary>
/// 从csv文件导入客户
/// </summary>
public HandleResult UploadClientCsv(string filePath)
{
//验证并转换文件格式为utf-8
var resultList = new List<string>();
var originaltype = EncodingType.GetType(filePath, resultList);
ChangeFileEncoding(filePath, originaltype);
var clinetList = new List<Client>();
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<Client>();
var bList = new List<ClientBankCard>();
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))
{
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<SamePeerEnum>().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;
}
/// <summary>
/// 从excel文件导入客户
/// </summary>
public HandleResult UploadClientExcel(Stream stream, bool isSellerV2)
{
var basedb = new ErpBaseContext();
var clients = new ExcelHelper().ExcelToDataTable(stream, null, true);
var clinetList = new List<Client>();
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<Client>();
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))
{
return "" + Name + "客户已经存在于黑名单中”";
}
//适当性评级导入数据验证
//List<string> AppropriatenessDegreeList = new List<string>() { "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<SamePeerEnum>().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; }
}
/// <summary>
/// 根据适用性评级内容获取ID
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static AppItem GetAppropriatenessList(string appStr)
{
var signTypes = new List<AppItem>();
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;
}
/// <summary>
/// 从excel文件导入客户联系人
/// </summary>
public HandleResult UploadClientDutyExcel(Stream stream)
{
var clientDutys = new ExcelHelper().ExcelToDataTable(stream, null, true);
var clientDutyList = new List<ClientDuty>();
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 = "";
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 "微信号":
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 + "不合法,导入失败";
}
}
if (IsReceiveEmailString == "是")
{
IsReceiveEmail = 1;
}
else if (!string.IsNullOrEmpty(IsReceiveEmailString) && IsReceiveEmailString != "否")
{
return "第" + rowNum + "行是否接收邮件:" + IsReceiveEmailString + "不合法,导入失败";
}
else
{
IsReceiveEmail = 0;
}
if (DbContext.client_black.Any(c => c.Name == Name))
{
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
};
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.Is浙期)
{
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;
}
/// <summary>
/// 从excel文件导入银行卡
/// </summary>
public HandleResult UploadClientBankcardExcel(Stream stream, int userId, string userName)
{
var clientBankcards = new ExcelHelper().ExcelToDataTable(stream, null, true);
var bankcardList = new List<ClientBankCard>();
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<StringBuilder>(10) { new StringBuilder(5200) };
//var tableName = DbContext.GetTableName<UnderlyingHisData>();
//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<string>(StringComparer.OrdinalIgnoreCase);
foreach (DataTable dt in ds.Tables)
{
ClientModel clientModle = null;
BusinessEiskFactorsModel businessEiskFactorsModel = null;
List<ClientDutyModel> 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;
}
/// <summary>
/// 导入人员信息 一个人一个职务所以需要数据处理, 处理成 同一人员多个职务 和一些赋值问题 ,
/// </summary>
/// <param name="readResult"></param>
private void HandleClientData(ReadResult readResult)
{
if (readResult.clientDutyModels != null && readResult.clientDutyModels.Any())
{
var dutyModelsNotHasNumberOrName = new List<ClientDutyModel>();
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<ClientDutyModel>();
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<string> listp = item.PersonnelTypeIds.Split(',').ToHashSet();
HashSet<string> listpId = item.PersonnelTypeIds.Split(',').ToHashSet();
item.PersonnelTypeIds = string.Join(",", listpId);
item.PersonnelTypeStr = string.Join(",", listp);
}
if (dutyModels != null && dutyModels.Any())
{
List<ClientDutyModel> clientDuties = new List<ClientDutyModel>();
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<ClientDutyModel> 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<ClientMeta> 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<ClientMeta> 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<ClientDutyModel> clientDutyModels { get; private set; }
public List<ClientMeta> metas { get; private set; }
public ReadResult()
{
clientModel = new ClientModel();
businessEiskFactorsModel = new BusinessEiskFactorsModel();
clientDutyModels = new List<ClientDutyModel>();
metas = new List<ClientMeta>();
}
}
public class BusinessEiskFactorsModel
{
/// <summary>
/// 表格名称
/// </summary>
public string DtName { get; set; }
/// <summary>
/// 过去三年募集资金使用情况*
/// </summary>
public string Past3YearFundUseStr { get; set; }
/// <summary>
/// 客户业务异常情况*
/// </summary>
public string BusExcStr { get; set; }
/// <summary>
/// 客户业务是否涉及跨境交易*
/// </summary>
public string CrossBoderBusStr { get; set; }
public bool CrossBoderBus { get; set; }
/// <summary>
/// 历史沿革问题*
/// </summary>
public string HisEvoProblemStr { get; set; }
/// <summary>
/// 股东出资情况*
/// </summary>
public string FundStatusStr { get; set; }
/// <summary>
/// 资金占用情形*
/// </summary>
public string FundUseStatusStr { get; set; }
}
public class ClientModel
{
/// <summary>
/// 表格名称
/// </summary>
public string DtName { get; set; }
/// <summary>
/// 产品户
/// </summary>
public string ProductAccountStr { get; set; }
public int ProductAccount { get; set; }
public string ClientName { get; set; }
/// <summary>
/// 项目组
/// </summary>
public string ProjectTeam { get; set; }
/// <summary>
/// 合作方式
/// </summary>
public string CooperationModeStr { get; set; }
/// <summary>
/// 合作类型
/// </summary>
public string CooperationTypeStr { get; set; }
/// <summary>
/// 成立日期
/// </summary>
public string IncorporationDateStr { get; set; }
public DateTime IncorporationDate { get; set; }
/// <summary>
/// 所处行业
/// </summary>
public string IndustryStr { get; set; }
public int Industry { get; set; }
/// <summary>
/// 经营范围
/// </summary>
public string NatureOfBusiness { get; set; }
/// <summary>
/// 注册地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 注册地址 国
/// </summary>
public string AddressNationalityStr { get; set; }
/// <summary>
/// 注册地址 省
/// </summary>
public string AddressProvince { get; set; }
/// <summary>
/// 注册地址 市
/// </summary>
public string AddressCity { get; set; }
/// <summary>
/// 详细地址
/// </summary>
public string AddressDetail { get; set; }
/// <summary>
/// 注册资本
/// </summary>
public string RegisteredCapital { get; set; }
/// <summary>
/// 统一社会信用代码
/// </summary>
public string UnifiedSocialCreditCode { get; set; }
/// <summary>
/// 营业执照有效期
/// </summary>
public DateTime ValidityOfBusinessLicense { get; set; }
/// <summary>
/// 营业执照有效期
/// </summary>
public string ValidityOfBusinessLicenseStr { get; set; }
/// <summary>
/// 公司性质
/// </summary>
public string CompanyNatureStr { get; set; }
public int CompanyNature { get; set; }
/// <summary>
/// 建立业务关系渠道
/// </summary>
public string SourceWayStr { get; set; }
/// <summary>
/// 近一年资产总额
/// </summary>
public string TotalAssetsInThePastYear { get; set; }
/// <summary>
/// 近三点是否涉及风险提示或负面报道
/// </summary>
public string HasThereBeenAnyRiskRecentlyStr { get; set; }
public bool HasThereBeenAnyRiskRecently { get; set; }
/// <summary>
/// 关联交易是否存在异常*
/// </summary>
public string HasTradeExceptionStr { get; set; }
public bool HasTradeException { get; set; }
/// <summary>
/// 本次建立业务时间*
/// </summary>
public string BuildBusinessDateStr { get; set; }
/// <summary>
/// 本次建立业务时间*
/// </summary>
public DateTime BuildBusinessDate { get; set; }
/// <summary>
/// 一年内3次及以上修改基本信息*
/// </summary>
public string RecentModificationsInfoStr { get; set; }
public bool RecentModificationsInfo { get; set; }
/// <summary>
/// 是否上市公司
/// </summary>
public string IsListedCompanyStr { get; set; }
public bool IsListedCompany { get; set; }
/// <summary>
/// 证券代码
/// </summary>
public string SecuritiesCode { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
public class ClientDutyModel
{
/// <summary>
/// 表格名称
/// </summary>
public string DtName { get; set; }
/// <summary>
/// ?人员类型
/// </summary>
public string PersonnelTypeStr { get; set; }
public string PersonnelTypeIds { get; set; }
public string ContactName { get; set; }
public string Address { get; set; }
/// <summary>
/// 注册地址 国
/// </summary>
public string AddressNationalityStr { get; set; }
public int AddressNationality { get; set; }
/// <summary>
/// 注册地址 省
/// </summary>
public string AddressProvince { get; set; }
/// <summary>
/// 注册地址 市
/// </summary>
public string AddressCity { get; set; }
/// <summary>
/// ?证件类型
/// </summary>
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; }
/// <summary>
/// 董事会身份
/// </summary>
public string IdentityOfTheBoardOfDirectorsStr { get; set; }
public int IdentityOfTheBoardOfDirectors { get; set; }
/// <summary>
/// 管理层身份
/// </summary>
public string ManagementIdentityStr { get; set; }
public int ManagementIdentity { get; set; }
/// <summary>
/// 是否股东
/// </summary>
public string IsShareholderStr { get; set; }
/// <summary>
/// 是否股东
/// </summary>
public bool IsShareholder { get; set; }
/// <summary>
/// 股东持股类型
/// </summary>
public string ShareholdingByShareholdersTypeStr { get; set; }
public int ShareholdingByShareholdersType { get; set; }
/// <summary>
/// 股东持股比例
/// </summary>
public string ShareholdingByShareholdersRatioStr { get; set; }
/// <summary>
/// 股东持股比例
/// </summary>
public decimal ShareholdingByShareholdersRatio { get; set; }
}
}
public class DongGuanClientImportResult
{
public string ResultMsg { get; set; }
public DataSet ResultSet { get; set; }
}
}