3380 lines
156 KiB
C#
3380 lines
156 KiB
C#
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 + "不合法,导入失败";
|
||
}
|
||
}
|
||
|
||
//默认为1
|
||
IsReceiveEmail = 1;
|
||
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; }
|
||
|
||
}
|
||
}
|