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

1485 lines
65 KiB
C#

using BaseOUDAL;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.Data;
using System.Text;
using YLErp.BLL;
using YLErp.Commons;
using YLErp.Helpers;
using YLErp.Model.Enum;
using YLErp.Models;
using YLErp.Modules.ClientModule.Models;
using YLErp.Modules.SystemModule;
namespace YLErp.Modules.ClientModule
{
public class ClientTemplateImportService : ClientBaseService
{
public ClientTemplateImportService(OptUserInfo userInfo) : base(userInfo)
{
}
public List<FormEditField> GetAllFormEditFieldToList()
{
var clientFields = ClientEditConfigService.GetFlatList(ClientEditConfigService.GetAllFormEditField(), out var col);
return clientFields.Distinct().Where(a => a != null && !string.IsNullOrEmpty(a.label) && !a.@readonly).ToList();
}
public string[] GetSelectData(Dictionary<string, IEnumerable<SelectItem>> selectDatas, string name)
{
return selectDatas.Where(a => a.Key == name).SelectMany(a => a.Value).Select(a => a.Text).ToArray();
}
/// <summary>
/// 下载客户基本信息模板
/// </summary>
public void UpdateClientInfoTemplate()
{
var dicPath = OtcAppContext.MapPath(@"\App_Docs\导入模板");
Directory.CreateDirectory(dicPath);
var xlsxFilePath = Path.Combine(dicPath, "客户导入_基本信息模板.xlsx");
if (!File.Exists(xlsxFilePath))
{
//var clientFields = GetAllFormEditFieldToList();
var config = ClientEditConfigService.GetConfig(true);
var sections = config.sections.Where(a => a.visible && a.fields.Any()).ToList();
var bytes = ListToExcel(sections, new List<FormEditField>(), config.selects);
File.WriteAllBytes(xlsxFilePath, bytes);
}
}
public byte[] ListToExcel(List<FormEditSection> formEditSections, List<FormEditField> fields, Dictionary<string, IEnumerable<SelectItem>> selectDatas)
{
var ms = new ExcelHelper.CMemoryStream
{
AllowClose = false
};
IWorkbook wb = new XSSFWorkbook();
try
{
//创建表
var sheet = wb.CreateSheet("客户基本信息");
//创建字体样式
var font = wb.CreateFont();
font.IsBold = true;
font.FontHeightInPoints = 10;
//背景颜色
short[] colourArr = { NPOI.HSSF.Util.HSSFColor.LightOrange.Index, NPOI.HSSF.Util.HSSFColor.LightBlue.Index, NPOI.HSSF.Util.HSSFColor.LightGreen.Index, NPOI.HSSF.Util.HSSFColor.LightTurquoise.Index };
var startIndex = 0;
var endIndex = 0;
var rowHeader = sheet.CreateRow(0);
for (var j = 0; j < formEditSections.Count; j++)
{
//创建标题样式
var styleHeader = wb.CreateCellStyle();
styleHeader.SetFont(font);
styleHeader.Alignment = HorizontalAlignment.Center;
styleHeader.FillPattern = FillPattern.SolidForeground;
//styleHeader.FillBackgroundColor = colourArr[j];
styleHeader.FillForegroundColor = colourArr[j % colourArr.Length];
//边框
styleHeader.BorderBottom = BorderStyle.Thin;
styleHeader.BorderLeft = BorderStyle.Thin;
styleHeader.BorderRight = BorderStyle.Thin;
styleHeader.BorderTop = BorderStyle.Thin;
var formEditFields = (formEditSections[j].fields ?? Enumerable.Empty<FormEditField>()).Where(a => !string.IsNullOrEmpty(a.label) && !a.@readonly);
if (formEditFields != null && formEditFields.Any())
{
fields.AddRange(formEditFields);
}
var fieldCount = formEditFields.Count();
endIndex = startIndex + fieldCount - 1;
for (var a = startIndex; a <= endIndex; a++)
{
var cell = rowHeader.CreateCell(a);
if (a == startIndex)
{
cell.SetCellValue(formEditSections[j].title);
}
cell.CellStyle = styleHeader;
}
sheet.AddMergedRegion(new CellRangeAddress(0, 0, startIndex, endIndex));//起始行号,终止行号, 起始列号,终止列号
startIndex += fieldCount;
}
// 创建绘图对象
var p = (XSSFDrawing)sheet.CreateDrawingPatriarch();
var helper = new XSSFDataValidationHelper((XSSFSheet)sheet);
//创建单元格样式
var style = wb.CreateCellStyle();
font.FontHeightInPoints = 10;
style.SetFont(font);
style.Alignment = HorizontalAlignment.Center;
var row = sheet.CreateRow(1);
for (var i = 0; i < fields.Count; i++)
{
if (fields[i].@readonly)
{
continue;
}
var icelltop = row.CreateCell(i);
icelltop.SetCellValue(fields[i].label);
// 获取批注对象
// (int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)
// 前四个参数是坐标点,后四个参数是编辑和显示批注时的大小.
var comment = (XSSFComment)p.CreateCellComment(new XSSFClientAnchor(0, 0, 0, 0, i + 1, 2, i + 4, 2 + 5));
// 输入批注信息
var IsRequired = $"是否必填:" + (fields[i].required ? "是" : "否");
switch (fields[i].type)
{
case "select":
var selectData = GetSelectData(selectDatas, fields[i].name);
if (selectData.Length > 0)
{
//if (selectData.Length > 20)
//{
// selectData = selectData.Take(20).ToArray();//npoi 下拉框数据过多会导致生成excel数据验证失败
//}
//CellRangeAddressList cellRegions = new CellRangeAddressList(1, 1000, i, i);//起始行号,终止行号, 起始列号,终止列号
//var dropDownConstraint = helper.CreateExplicitListConstraint(selectData);
//IDataValidation dropDownValidation = helper.CreateValidation(dropDownConstraint, cellRegions);
//dropDownValidation.CreateErrorBox("错误", "请按右侧下拉箭头选择!");
//dropDownValidation.ShowErrorBox = true;
//sheet.AddValidationData(dropDownValidation);
comment.SetString($"{IsRequired}; 可选下拉框值; {fields[i].placeholder}");
}
break;
case "select-m":
var selectMData = GetSelectData(selectDatas, fields[i].name);
var selectMDataStr = string.Join(",", selectMData);
comment.SetString($"{IsRequired};此单元格可填:【{selectMDataStr}】; 可填多个值以英文逗号‘,’隔开; {fields[i].placeholder}");
break;
case "select-sm":
var selectSMData = GetSelectData(selectDatas, fields[i].name);
var selectSMDataStr = string.Join(",", selectSMData);
comment.SetString($"{IsRequired};此单元格可填:【{selectSMDataStr}】; 可填多个值以英文逗号‘,’隔开; {fields[i].placeholder}");
break;
case "date":
comment.SetString($"{IsRequired}; 可填(yyyy-MM-dd , yyyy/MM/dd)日期格式; {fields[i].placeholder}");
break;
case "dateStr":
comment.SetString($"{IsRequired}; 可填(yyyy-MM-dd , yyyy/MM/dd)日期格式或长期有效; {fields[i].placeholder}");
break;
case "text":
comment.SetString($"{IsRequired}; {fields[i].placeholder}");
break;
default:
comment = null;
break;
}
icelltop.CellComment = comment;
icelltop.CellStyle = style;
sheet.SetColumnWidth(i, 15 * 256);
//启用数字验证
//if (column.NumberValidation)
//{
// var numberValidStart = column.NumberValidStart;
// var numberValidEnd = column.NumberValidEnd;
// var numberConstraint = helper.CreateNumericConstraint(ValidationType.INTEGER, OperatorType.BETWEEN, numberValidStart.ToString(), numberValidEnd.ToString());
// IDataValidation numberValidation = helper.CreateValidation(numberConstraint, cellRegions);
// numberValidation.CreateErrorBox("错误", $"只能输入数字:{numberValidStart}-{numberValidEnd}");
// numberValidation.ShowErrorBox = true;
// sheet.AddValidationData(numberValidation);
//}
}
//
wb.Write(ms); //写入到excel
return ms.ToArray();
}
finally
{
wb.Close();
if (ms != null)
{
ms.AllowClose = true;
ms.Close();
ms.Dispose();
}
}
}
public void ImportFromExcel(Stream streamIn, out int totalNum, out int successNum)
{
totalNum = 0;
successNum = 0;
var rowIndex = 0;
try
{
var ds = Office.ExcelHelper.ReadExcelAsDataSet(streamIn, new[] { 0 }, 0);
if (ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 3)
{
throw new ServiceException("读取导入数据失败:数据为空") { Tag = "111" };
}
var table = ds.Tables[0];
var reader = new DataRowReader(table, 1);
rowIndex = 2;
totalNum = table.Rows.Count - rowIndex;
var columnNameList = new List<string>();
for (var i = 0; i < table.Columns.Count; i++)
{
columnNameList.Add(table.Rows[1][i] as string);//获取到DataColumn列对象的列名
}
foreach (var row in table.Rows.Cast<DataRow>().Skip(2))
{
using var trans = BeginTransaction();
rowIndex++;
if (row.ItemArray.All(n => string.IsNullOrWhiteSpace(n?.ToString())))
{
totalNum--;
continue;
}
reader.SetDataRow(row);
HandleClientInfo(reader, columnNameList);
successNum++;
trans.Commit();
}
}
catch (ServiceException se)
{
if (se.Tag != null)
{
throw;
}
throw new ServiceException($"已成功导入{successNum}条;\n第{rowIndex}行,{se.Message}");
}
catch (Exception ex)
{
throw new ServiceException($"已成功导入{successNum}条,\n第{rowIndex}行,发生错误:{ex.Message}", ex);
}
}
public ImportFromExcelForBatchUpdateRes ImportFromExcelForBatchUpdate(Stream streamIn)
{
var res = new ImportFromExcelForBatchUpdateRes() { HasError = false };
var errStrb = new StringBuilder();
var rowIndex = 0;
var ds = Office.ExcelHelper.ReadExcelAsDataSet(streamIn, new[] { 0 }, 0);
if (ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 3)
{
throw new ServiceException("读取导入数据失败:数据为空") { Tag = "111" };
}
var table = ds.Tables[0];
var reader = new DataRowReader(table, 1);
rowIndex = 2;
res.TotalNum = table.Rows.Count - rowIndex;
var columnNameList = new List<string>();
for (var i = 0; i < table.Columns.Count; i++)
{
columnNameList.Add(table.Rows[1][i] as string);//获取到DataColumn列对象的列名
}
foreach (var row in table.Rows.Cast<DataRow>().Skip(2))
{
try
{
rowIndex++;
if (row.ItemArray.All(n => string.IsNullOrWhiteSpace(n?.ToString())))
{
res.TotalNum--;
continue;
}
reader.SetDataRow(row);
HandleClientInfo(reader, columnNameList, false, false);
//res.SuccessNum++;
}
catch (ServiceException ex)
{
res.HasError = true;
errStrb.Append($"第{rowIndex}行,{ex.Message},导入失败<br/>");
}
catch (Exception ex)
{
res.HasError = true;
throw new ServiceException($"已成功导入{res.SuccessNum}条,\n第{rowIndex}行,发生错误:{ex.Message}", ex);
}
}
if (!res.HasError)
{
rowIndex = 2;
res.TotalNum = table.Rows.Count - rowIndex;
res.SuccessNum = 0;
foreach (var row in table.Rows.Cast<DataRow>().Skip(2))
{
try
{
using var trans = BeginTransaction();
rowIndex++;
if (row.ItemArray.All(n => string.IsNullOrWhiteSpace(n?.ToString())))
{
res.TotalNum--;
continue;
}
reader.SetDataRow(row);
HandleClientInfo(reader, columnNameList, false, true);
res.SuccessNum++;
trans.Commit();
}
catch (ServiceException ex)
{
res.HasError = true;
errStrb.Append($"第{rowIndex}行,{ex.Message},导入失败<br/>");
}
catch (Exception ex)
{
res.HasError = true;
throw new ServiceException($"已成功导入{res.SuccessNum}条,\n第{rowIndex}行,发生错误:{ex.Message}", ex);
}
}
}
res.ErrorMsg = errStrb.ToString();
return res;
}
/// <summary>
/// 处理客户导入 按行
/// </summary>
/// <param name="reader"></param>
/// <param name="columns"></param>
/// <param name="canAdd">是否允许新增客户</param>
/// <exception cref="ServiceException"></exception>
public void HandleClientInfo(DataRowReader reader, List<string> columns, bool canAdd = true, bool saveData = true)
{
if (columns != null && columns.Count > 0)
{
var isUpdate = false;
var client = new Client();
var clientSaveService = new ClientSaveService(OptUser);
var formEditFields = ClientEditConfigService.GetAllFormEditField();
Client oldClient;
using (var clientDB = new ClientDBContext())
{
for (var i = 0; i < columns.Count; i++)
{
var ColumnName = columns[i];
var formEditField = ClientEditConfigService.GetFormEditFieldByLabel(formEditFields, ColumnName);
if (formEditField?.name == "Name")
{
client.Name = reader.GetString(ColumnName, true);
break;
}
}
if (string.IsNullOrEmpty(client.Name))
{
throw new ServiceException("客户名称必填");
}
//为了支持客户修改导入,未填写的字段需要保留已存在的数据,不能被空值覆盖
oldClient = clientDB.client.Where(a => a.Name == client.Name).FirstOrDefault();
if (oldClient != null)
{
isUpdate = true;
client = oldClient;
}
}
if (!isUpdate && !canAdd)
{
throw new ServiceException("客户不存在");
}
var clientMetas = new List<ClientMeta>();
var config = ClientEditConfigService.GetConfig(true);
for (var i = 0; i < columns.Count; i++)
{
var ColumnName = columns[i];
if (string.IsNullOrEmpty(ColumnName))
{
throw new ServiceException("导入的excel表格列名不能为空");
}
var formEditField = ClientEditConfigService.GetFormEditFieldByLabel(formEditFields, ColumnName);
if (formEditField == null)
{
continue;
}
if (isUpdate)
{
formEditField.required = false;
}
string fieldValue;
//if (config.defaults.Any(a => a.Key == formEditField.name))
//{
// formEditField.required = false;
// formEditField.value = config.defaults[formEditField.name];
//}
switch (formEditField.type)
{
case "select":
if (formEditField.label == "机构属性" && (client.ClientType == "产品" || client.ClientType == "自然人"))
{
formEditField.required = false;
}
var cellValue = reader.GetString(ColumnName, formEditField.required);
if (string.IsNullOrEmpty(cellValue))
{
continue;
}
var selectData = GetSelectData(config.selects, formEditField.name);
if (!selectData.Any(a => a == cellValue))
{
throw new ServiceException($"导入数据不正确,请选择【{ColumnName}】下拉框中的数据");
}
fieldValue = ClientEditConfigService.GetSelectValue(formEditField.name, cellValue);
SetAttributeValue(client, clientMetas, formEditField, fieldValue);
break;
case "select-m":
var cellselsValue = reader.GetString(ColumnName, formEditField.required);
if (string.IsNullOrEmpty(cellselsValue))
{
continue;
}
SetAttributeValue(client, clientMetas, formEditField, cellselsValue, config.selects);
break;
case "select-sm":
var cellselsmValue = reader.GetString(ColumnName, formEditField.required);
if (string.IsNullOrEmpty(cellselsmValue))
{
continue;
}
SetAttributeValue(client, clientMetas, formEditField, cellselsmValue, config.selects);
break;
case "text":
var celltxtValue = reader.GetString(ColumnName, formEditField.required);
if (string.IsNullOrEmpty(celltxtValue))
{
continue;
}
SetAttributeValue(client, clientMetas, formEditField, celltxtValue);
break;
case "date":
var celldateValue = reader.GetDate(ColumnName, formEditField.required);
if (celldateValue == null)
{
continue;
}
SetAttributeValue(client, clientMetas, formEditField, celldateValue?.ToString("yyyy-MM-dd"));
break;
case "dateStr":
var celldateStrValue = reader.GetString(ColumnName, formEditField.required);
if (string.IsNullOrEmpty(celldateStrValue))
{
continue;
}
SetAttributeValue(client, clientMetas, formEditField, celldateStrValue);
break;
default:
break;
}
if (!string.IsNullOrEmpty(client.ClientType))
{
switch (client.ClientType)
{
case "机构":
client.ProductNumber = null;
client.AdminRegisteredNum = null;
client.AdminFullName = null;
break;
case "产品":
client.InstitutionalAttributes = null;
break;
case "自然人":
client.ProductNumber = null;
client.AdminRegisteredNum = null;
client.AdminFullName = null;
client.RegisteredCapital = null;
client.RegisteredAddress = null;
break;
}
}
if (!string.IsNullOrEmpty(client.BusinessType))
{
var item = DictionaryBLL.GetDictionaryItemByName(client.BusinessType);
var customerNatures = item == null ? "" : item.ShortName;
if (customerNatures.IndexOf(",") > 0)
{
client.CustomerNature1 = customerNatures.Split(',')[0];
client.CustomerNature2 = customerNatures.Split(',')[1];
}
else
{
client.CustomerNature1 = customerNatures;
}
}
if (!saveData)
{
clientSaveService.CheckModel(client, oldClient.Name, false);
}
}
if (saveData)
{
SaveClientInfo(client, clientMetas);
}
}
}
public void SetAttributeValue(Client client, List<ClientMeta> clientMetas, FormEditField formEditField, object value)
{
if (formEditField.name.Contains("meta_"))
{
var clientMeta = new ClientMeta()
{
MetaKey = formEditField.name.Split('_')[1],
MetaValue = value.ToString(),
OptDate = DateTime.Now,
OptId = UserId,
OptName = UserName
};
clientMetas.Add(clientMeta);
}
else
{
var propertys = client.GetType().GetProperties();
foreach (var property in propertys)
{
if (formEditField.name == property.Name)
{
if (formEditField.name == "LicenseValidTimeStr")
{
property.SetValue(client, value.ToString() == "长期有效" ? "30001231" : value.ToString(), null);
break;
}
if (property.PropertyType == typeof(string))
{
property.SetValue(client, value.ToString(), null);
}
else if (property.PropertyType == typeof(int) || property.PropertyType == typeof(int?))
{
property.SetValue(client, Convert.ToInt32(value), null);
}
else if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
{
property.SetValue(client, Convert.ToDateTime(value), null);
}
}
}
}
}
public void SetAttributeValue(Client client, List<ClientMeta> clientMetas, FormEditField formEditField, string value, Dictionary<string, IEnumerable<SelectItem>> selectDatas)
{
if (!string.IsNullOrEmpty(value))
{
var texts = new List<string>();
if (value.Contains(","))
{
texts = value.Split(',').ToList();
}
else
{
texts.Add(value);
}
if (selectDatas[formEditField.name] != null)
{
if (!selectDatas[formEditField.name].Any(a => texts.Any(b => b == a.Text)))
{
throw new ServiceException($"【{formEditField.label}】填写有误");
}
}
if (formEditField.name.Contains("meta_"))
{
var clientMeta = new ClientMeta()
{
MetaKey = formEditField.name.Split('_')[1],
MetaValue = value.ToString(),
OptDate = DateTime.Now,
OptId = UserId,
OptName = UserName
};
clientMetas.Add(clientMeta);
}
else
{
var vals = new List<string>();
var propertys = client.GetType().GetProperties();
foreach (var property in propertys)
{
if (formEditField.name == property.Name)
{
if (selectDatas.TryGetValue(formEditField.name, out var selectData))
{
foreach (var item in selectData)
{
if (texts.Any(a => a == item.Text))
{
vals.Add(item.Value);
}
}
if (property.Name == "TradingInstType")
{
var val = vals.Sum(a => Convert.ToInt32(a));
property.SetValue(client, val, null);
break;
}
else
{
var valStr = string.Join(",", vals);
property.SetValue(client, valStr, null);
}
}
}
}
}
}
}
public void SaveClientInfo(Client client, List<ClientMeta> clientMeta = null)
{
using var clientDB = new ClientDBContext();
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;
}
if (clientMeta != null)
{
client.MetaDic = clientMeta.ToDictionary(a => a.MetaKey, b => b.MetaValue);
}
var oldClient = clientDB.client.Where(a => a.Name == client.Name).FirstOrDefault();
if (oldClient != null)
{
client.id = oldClient.id;
client.Number = oldClient.Number;
}
if (PS.Config.IsGuoJun && client.ConfirmBookMode == "单章版" && client.SupProtocolDate == null)
{
client.SupProtocolDate = client.ProtocolSignDate;
}
new ClientSaveService(OptUser).SaveData(client, null, out bool blAudit);
var client_autolog = new ClientAuditLog
{
ClientId = client.id,
OptType = "导入客户基本信息",
Changes = string.Empty,
DataType = "00",
OptId = UserId,
OptName = UserName,
OptDate = DateTime.Now
};
clientDB.ClientAuditLog.Add(client_autolog);
clientDB.SaveChanges();
}
/// <summary>
/// 客户导入kyc信息
/// </summary>
/// <param name="streamIn"></param>
/// <exception cref="ServiceException"></exception>
public void ImportKYCExcelToClientInfo(Stream streamIn)
{
string[] cellAdress = { "D5", "D6", "D7", "D8", "D9", "D10", "D11", "G11", "D12", "D13", "D14", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "D29", "D30", "D31", "D32", "D33", "D34", "F36", "F37", "F38", "F39", "F40", "F41" };
string[] cellAdress1 = { "D8", "D9", "D10", "D11", "D12", "D17", "D18", "D24", "D25" };
string[] cellAdress2 = { "D9", "D11", "D12" };
string[] cellAdress3 = { "D7", "G7", "D12", "G12", "D17", "G17", "D22", "G22" };
string[] cellAdress4 = { "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19" };
string[] cols = { "C", "D", "E", "F", "G", "H", "I" };
int[] rows = { 17, 18, 19, 20 };
var cellAdress5 = new List<string>();
foreach (var col in cols)
{
foreach (var row in rows)
{
cellAdress5.Add(col + row.ToString());
}
}
string[] cellAdress6 = { "A100", "A177", "A199", "D8", "D9" };
string[] cellAdress7 = { "D8", "D9" };
var sheetDic = new Dictionary<string, string[]>
{
{ "基本信息表", cellAdress },
{ "交易信息", cellAdress1 },
//sheetDic.Add("财务信息", cellAdress2);
{ "股东信息", cellAdress3 },
{ "受益人信息", cellAdress4 },
{ "授权委托", cellAdress5.ToArray() },
{ "风险评估", cellAdress6 },
{ "资信评估", cellAdress7 }
};
var dics = new ExcelHelper().ExcelToDictionary(streamIn, sheetDic);
var client = new Client
{
MetaDic = new Dictionary<string, string>()
};
var config = ClientEditConfigService.GetConfig(true);
if (config.defaults != null)
{
foreach (var dic in config.defaults)
{
if (dic.Key.Contains("meta_"))
{
client.MetaDic.Add(dic.Key.Split('_')[1], dic.Value);
}
else
{
var propertys = client.GetType().GetProperties();
foreach (var property in propertys)
{
if (dic.Key == property.Name)
{
if (property.PropertyType == typeof(string))
{
property.SetValue(client, dic.Value.ToString(), null);
}
else if (property.PropertyType == typeof(int) || property.PropertyType == typeof(int?))
{
var val = string.IsNullOrEmpty(dic.Value) ? 0 : Convert.ToInt32(dic.Value);
property.SetValue(client, val, null);
}
else if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
{
property.SetValue(client, Convert.ToDateTime(dic.Value), null);
}
}
}
}
}
}
var oldClient = DbContext.client.FirstOrDefault(n => n.Name == dics["基本信息表"]["D5"].ToString());
client.Name = dics["基本信息表"]["D5"].ToString();
if (string.IsNullOrEmpty(client.Name))
{
throw new ServiceException("单位全称必填!");
}
if (oldClient?.ApprovalStatus == "审批中")
{
throw new ServiceException("审批中客户不可以修改客户信息");
}
//client.LicenseType = "营业执照";
client.LicenseCode = dics["基本信息表"]["D6"].ToString();
if (string.IsNullOrEmpty(client.LicenseCode))
{
throw new ServiceException("营业执照登记证号必填!");
}
client.MetaDic["FoundDate"] = DateTime.TryParse(dics["基本信息表"]["D7"].ToString(), out var FoundDate) ? FoundDate.ToString("yyyy-MM-dd") : null;
if (string.IsNullOrEmpty(dics["基本信息表"]["D7"].ToString()))
{
throw new ServiceException("成立日期必填!");
}
client.ProtocolSignDate = DateTime.Now;
client.RegisteredCapital = dics["基本信息表"]["D8"].ToString();
if (string.IsNullOrEmpty(client.RegisteredCapital))
{
throw new ServiceException("注册资本(万元)必填!");
}
var D9 = dics["基本信息表"]["D9"].ToString();
if (string.IsNullOrEmpty(D9))
{
throw new ServiceException("机构类型必填!");
}
client.MetaDic["OrganizationType"] = D9;
client.ClientType = "机构";
var D10 = dics["基本信息表"]["D10"].ToString();
if (string.IsNullOrEmpty(D10))
{
throw new ServiceException("性质必填!");
}
if (D10.Contains("其他"))
{
D10 = "其他";
}
client.MetaDic["Nature"] = D10;
var D11 = dics["基本信息表"]["D11"].ToString();
if (string.IsNullOrEmpty(D11))
{
throw new ServiceException("投资者类型必填!");
}
client.MetaDic["Investor"] = D11;
if (D11 == "其他(请备注中填写)")
{
var G11 = dics["基本信息表"]["G11"].ToString();
if (string.IsNullOrEmpty(G11))
{
throw new ServiceException("投资者类型选择其他,请填写备注!");
}
switch (G11)
{
case "风险管理子公司":
client.BusinessType = "期货公司风险管理子公司";
break;
case "私募基金管理人":
client.BusinessType = "基金管理人";
break;
case "私募基金产品":
client.BusinessType = "金融产品";
break;
default:
client.BusinessType = G11;
break;
}
}
else
{
switch (D11)
{
case "证券自营":
client.BusinessType = "券商";
break;
case "保险公司":
client.BusinessType = "保险";
break;
default:
client.BusinessType = D11;
break;
}
}
var item = DictionaryBLL.GetDictionaryItemByName(client.BusinessType);
var customerNatures = item == null ? "" : item.ShortName;
if (customerNatures.IndexOf(",") > 0)
{
client.CustomerNature1 = customerNatures.Split(',')[0];
client.CustomerNature2 = customerNatures.Split(',')[1];
}
else
{
client.CustomerNature1 = customerNatures;
}
var D12 = dics["基本信息表"]["D12"].ToString();
if (string.IsNullOrEmpty(D12))
{
throw new ServiceException("经营范围必填!");
}
client.MetaDic["ScopeBusiness"] = D12;
var D13 = dics["基本信息表"]["D13"].ToString();
if (string.IsNullOrEmpty(D13))
{
throw new ServiceException("注册地址必填!");
}
client.RegisteredAddress = D13;
var D14 = dics["基本信息表"]["D14"].ToString();
if (string.IsNullOrEmpty(D14))
{
throw new ServiceException("办公地址必填!");
}
client.PostalAddress = D14;
var F16 = dics["基本信息表"]["F16"].ToString();
var F17 = dics["基本信息表"]["F17"].ToString();
var F18 = dics["基本信息表"]["F18"].ToString();
var F19 = dics["基本信息表"]["F19"].ToString();
var F20 = dics["基本信息表"]["F20"].ToString();
var F21 = dics["基本信息表"]["F21"].ToString();
var F22 = dics["基本信息表"]["F22"].ToString();
var F23 = dics["基本信息表"]["F23"].ToString();
client.BadFaithRecord = (int)BadFaithRecordEnum.;
if (F16 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.中国人民银行征信中心;
}
else if (F17 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.最高人民法院失信被执行人名单;
}
else if (F18 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.工商行政管理机构;
}
else if (F19 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.税务管理机构;
}
else if (F20 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.监管机构;
}
else if (F21 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.投资者在期货经营机构从事投资活动时产生的违约失信行为记录;
}
else if (F22 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.过度维权等不当行为信息;
}
else if (F23 == "是")
{
client.BadFaithRecord = (int)BadFaithRecordEnum.其他组织;
}
var F36 = dics["基本信息表"]["F36"].ToString();
if (string.IsNullOrEmpty(F36))
{
throw new ServiceException("是否为来自FATF、APG、EAG等国际组织指定的高风险国家或地区 必填!");
}
client.MetaDic["IsHighRsk"] = F36 == "是" ? "1" : "0";
var F37 = dics["基本信息表"]["F37"].ToString();
if (string.IsNullOrEmpty(F37))
{
throw new ServiceException("资金来源必填!");
}
if (F37 == "自有")
{
client.FundsSource = 1;
}
else if (F37 == "其他")
{
client.FundsSource = 2;
}
else
{
client.FundsSource = null;
}
var F38 = dics["基本信息表"]["F38"].ToString();
if (string.IsNullOrEmpty(F38))
{
throw new ServiceException("是否存在实际控制关系必填!");
}
client.IsRealControl = F38 == "是" ? 1 : 0;
var F39 = dics["基本信息表"]["F39"].ToString();
if (string.IsNullOrEmpty(F39))
{
throw new ServiceException("投资期限必填!");
}
if (F39 == EnumHelper.GetDescriptionByName(InvestmentTermEnum.partone))
{
client.InvestmentTerm = (int)InvestmentTermEnum.partone;
}
else if (F39 == EnumHelper.GetDescriptionByName(InvestmentTermEnum.parttwo))
{
client.InvestmentTerm = (int)InvestmentTermEnum.parttwo;
}
else if (F39 == EnumHelper.GetDescriptionByName(InvestmentTermEnum.partthree))
{
client.InvestmentTerm = (int)InvestmentTermEnum.partthree;
}
else if (F39 == EnumHelper.GetDescriptionByName(InvestmentTermEnum.partfour))
{
client.InvestmentTerm = (int)InvestmentTermEnum.partfour;
}
else
{
client.InvestmentTerm = null;
}
var F40 = dics["基本信息表"]["F40"].ToString();
if (string.IsNullOrEmpty(F40))
{
throw new ServiceException("投资品种必填!");
}
if (F40 == "场外衍生品")
{
client.DerivativesInvestmentVarieties = "1,2,3";
}
else if (F40 == "其它")
{
client.DerivativesInvestmentVarieties = "4";
}
else
{
client.DerivativesInvestmentVarieties = "";
}
var D41 = dics["基本信息表"]["F41"].ToString();
if (string.IsNullOrEmpty(D41))
{
throw new ServiceException("期望收益必填!");
}
client.ExpectedReturn2 = D41.Replace('~', '-');
var ActualControllerList = new List<string>();
var shareholder = dics["股东信息"];
if (!string.IsNullOrEmpty(shareholder["D7"].ToString()) && shareholder["D7"].ToString() != "/")
{
ActualControllerList.Add(shareholder["D7"].ToString() + Convert.ToDouble(shareholder["G7"]).OtcFormatPercent());
}
if (!string.IsNullOrEmpty(shareholder["D12"].ToString()) && shareholder["D12"].ToString() != "/")
{
ActualControllerList.Add(shareholder["D12"].ToString() + Convert.ToDouble(shareholder["G12"]).OtcFormatPercent());
}
if (!string.IsNullOrEmpty(shareholder["D17"].ToString()) && shareholder["D17"].ToString() != "/")
{
ActualControllerList.Add(shareholder["D17"].ToString() + Convert.ToDouble(shareholder["G17"]).OtcFormatPercent());
}
if (!string.IsNullOrEmpty(shareholder["D22"].ToString()) && shareholder["D22"].ToString() != "/")
{
ActualControllerList.Add(shareholder["D22"].ToString() + Convert.ToDouble(shareholder["G22"]).OtcFormatPercent());
}
client.ActualController = ActualControllerList.Any() ? string.Join(";", ActualControllerList) : "";
var ActualBeneficiaryList = new List<string>();
var beneficiary = dics["受益人信息"];
if (!string.IsNullOrEmpty(beneficiary["F12"].ToString()) && beneficiary["F12"].ToString() != "/")
{
var f13 = beneficiary["F13"]?.ToString().TrimToNull();
if (f13 != null && !f13.EndsWith("%") && double.TryParse(f13, out var d))
{
f13 = d.OtcFormatFlex(2, percent: true);
}
ActualBeneficiaryList.Add(beneficiary["F12"].ToString() + f13);
}
if (!string.IsNullOrEmpty(beneficiary["F14"].ToString()) && beneficiary["F14"].ToString() != "/")
{
if (!string.IsNullOrEmpty(beneficiary["F15"].ToString()) && beneficiary["F15"].ToString() != "/")
{
ActualBeneficiaryList.Add(beneficiary["F14"].ToString() + Convert.ToDouble(beneficiary["F15"]).OtcFormatPercent());
}
}
if (!string.IsNullOrEmpty(beneficiary["F16"].ToString()) && beneficiary["F16"].ToString() != "/")
{
if (!string.IsNullOrEmpty(beneficiary["F17"].ToString()) && beneficiary["F17"].ToString() != "/")
{
ActualBeneficiaryList.Add(beneficiary["F16"].ToString() + Convert.ToDouble(beneficiary["F17"]).OtcFormatPercent());
}
}
if (!string.IsNullOrEmpty(beneficiary["F18"].ToString()) && beneficiary["F18"].ToString() != "/")
{
if (!string.IsNullOrEmpty(beneficiary["F19"].ToString()) && beneficiary["F19"].ToString() != "/")
{
ActualBeneficiaryList.Add(beneficiary["F18"].ToString() + Convert.ToDouble(beneficiary["F19"]).OtcFormatPercent());
}
}
client.ActualBeneficiary = ActualBeneficiaryList.Any() ? string.Join(";", ActualBeneficiaryList) : "";
//投资风险调查-投资经验
switch (dics["风险评估"]["A100"].ToString())
{
case "1":
client.InvestmentExperience = "有限";
break;
case "2":
case "3":
client.InvestmentExperience = "一般";
break;
case "4":
client.InvestmentExperience = "丰富";
break;
case "5":
client.InvestmentExperience = "非常丰富";
break;
}
//投资风险调查-可接受损失
switch (dics["风险评估"]["A177"].ToString())
{
case "1":
client.AcceptableLoss = "10%以内";
break;
case "2":
client.AcceptableLoss = "10%-30%";
break;
case "3":
client.AcceptableLoss = "30%-50%";
break;
case "4":
client.AcceptableLoss = "50%以上";
break;
}
//投资风险调查-交易目的
switch (dics["风险评估"]["A199"].ToString())
{
case "2":
client.TransactionTarget = "投资";
break;
case "3":
client.TransactionTarget = "套保";
break;
default:
client.TransactionTarget = oldClient?.TransactionTarget;
break;
}
if (client.QuestionnaireScore != null)
{
client.QuestionnaireScore = Convert.ToInt32(dics["风险评估"]["D8"]);
}
var D9_risk = dics["风险评估"]["D9"].ToString();
if (string.IsNullOrEmpty(D9_risk))
{
client.AppropriatenessDegree = null;
}
client.IsEvaluate = (client.QuestionnaireScore != null && client.QuestionnaireScore >= 0) ? 1 : 0;
client.MetaDic["CreditScore"] = dics["资信评估"]["D8"].ToString();
client.MetaDic["CreditRating"] = dics["资信评估"]["D9"].ToString();
var counterPartyType = dics["交易信息"]["D24"].ToString().Replace("-", "").Replace("、", "");
var clientLevelList = DbContext.clientlevel.ToList();
var levelName = "";
var noProcess = false;
if (counterPartyType == CounterPartyTypeEnum.一般机构普通投资者.ToString())
{
client.ProperClientClass = "普通";
if (D9_risk == "C4")
{
client.AppropriatenessDegree = (int)AppropriatenessDegreeNewEnum.普通C4类;
levelName = LevelNameEnum.C4风险承受能力投资者.ToString();
//client.LevelId = (int)AppropriatenessDegreeNewEnum.C4风险承受能力投资者;
}
else if (D9_risk == "C5")
{
client.AppropriatenessDegree = (int)AppropriatenessDegreeNewEnum.普通C5类;
//client.LevelId = (int)AppropriatenessDegreeNewEnum.C5风险承受能力投资者;
levelName = LevelNameEnum.C5风险承受能力投资者.ToString();
}
else
{
noProcess = true;
client.AppropriatenessDegree = oldClient?.AppropriatenessDegree;
client.LevelId = oldClient?.LevelId;
//throw new ServiceException($"交易对手类型是一般机构普通投资者时,风险评估中对应的评级必须是C4或C5,当前填写值是{D9_risk},不符合要求!");
}
}
else if (counterPartyType == CounterPartyTypeEnum.一般机构专业投资者.ToString())
{
client.AppropriatenessDegree = (int)AppropriatenessDegreeNewEnum.专业B级;
//client.LevelId = (int)AppropriatenessDegreeNewEnum.B类专业投资者;
levelName = LevelNameEnum.B类专业投资者.ToString();
client.ProperClientClass = "专业";
}
else if (counterPartyType == CounterPartyTypeEnum.金融机构同业证券保险等.ToString())
{
client.AppropriatenessDegree = (int)AppropriatenessDegreeNewEnum.专业A级;
//client.LevelId = (int)AppropriatenessDegreeNewEnum.A类专业投资者;
levelName = LevelNameEnum.A类专业投资者.ToString();
client.ProperClientClass = "专业";
}
else if (counterPartyType == CounterPartyTypeEnum.金融产品.ToString())
{
client.ClientType = "产品";
client.AppropriatenessDegree = (int)AppropriatenessDegreeNewEnum.专业A级;
//client.LevelId = (int)AppropriatenessDegreeNewEnum.A类专业投资者;
levelName = LevelNameEnum.A类专业投资者.ToString();
client.ProperClientClass = "专业";
}
client.ChangeReasonAndEvaluationResults = "无";
if (!noProcess)
{
var clientLevel = clientLevelList.FirstOrDefault(n => n.LevelName == levelName);
if (clientLevel != null)
{
client.LevelId = clientLevel.id;
}
}
//邮政编码
client.PostalCode = dics["交易信息"]["D10"].ToString();
SaveClientInfo(client);
var clientDutyLegalPerson = new ClientDuty
{
ContactTypeId = DbContext.contactype.Where(a => a.ContactType == "法人").FirstOrDefault()?.id + "",
ContactName = dics["基本信息表"]["D29"].ToString()
};
if (string.IsNullOrEmpty(clientDutyLegalPerson.ContactName))
{
throw new ServiceException("法定代表人必填!");
}
var D30 = dics["基本信息表"]["D30"].ToString();
if (string.IsNullOrEmpty(D30))
{
throw new ServiceException("证件类型必填!");
}
if (D30 == IdCardTypeEnum.身份证.ToString())
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.身份证;
}
else if (D30 == IdCardTypeEnum.军官证.ToString())
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.军官证;
}
else if (D30 == "回乡证(港澳)")
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.港澳通行证;
}
else if (D30 == IdCardTypeEnum.护照.ToString())
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.护照;
}
else if (D30 == IdCardTypeEnum.台胞证.ToString())
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.台胞证;
}
else
{
clientDutyLegalPerson.IdCardType = (int)IdCardTypeEnum.其他;
}
clientDutyLegalPerson.IdCardNo = dics["基本信息表"]["D31"].ToString();
if (string.IsNullOrEmpty(clientDutyLegalPerson.IdCardNo))
{
throw new ServiceException("证件号码必填!");
}
var IdCardDate = dics["基本信息表"]["D32"].ToString();
if (string.IsNullOrEmpty(IdCardDate))
{
throw new ServiceException("证件有效期必填!");
}
else if (IdCardDate.Contains("长期"))
{
//为了兼容下面的逻辑;
IdCardDate = "至2099-12-31";
}
else if (!IdCardDate.Contains("至"))
{
throw new ServiceException("证件有效期必须为YYYY-MM-DD至YYYY-MM-DD格式!");
}
clientDutyLegalPerson.IdCardDate = Convert.ToDateTime(IdCardDate.Split('至')[1]);
clientDutyLegalPerson.PhoneNumber = dics["基本信息表"]["D33"].ToString();
if (string.IsNullOrEmpty(clientDutyLegalPerson.PhoneNumber))
{
throw new ServiceException("联系电话必填!");
}
var D34 = dics["基本信息表"]["D34"].ToString();
if (!string.IsNullOrEmpty(D34))
{
if (D34.Contains('/'))
{
clientDutyLegalPerson.Email = D34.Split('/')[0];
clientDutyLegalPerson.Fax = D34.Split('/')[1];
}
else
{
clientDutyLegalPerson.Email = D34;
}
}
clientDutyLegalPerson.IsReceiveEmail = string.IsNullOrEmpty(clientDutyLegalPerson.Email) ? 0 : 1;
clientDutyLegalPerson.ClientId = client.id;
var clientDutyLegalPersonId = DbContext.clientduty.Where(a => a.ApprovalOrder < 1 && a.ClientId == clientDutyLegalPerson.ClientId
&& a.ContactName == clientDutyLegalPerson.ContactName
&& a.ContactTypeId == clientDutyLegalPerson.ContactTypeId).FirstOrDefault()?.id ?? 0;
clientDutyLegalPerson.id = clientDutyLegalPersonId;
new ClientDutyService(OptUser).SaveClientDuty(clientDutyLegalPerson);
var clientDuty = new ClientDuty
{
ContactTypeId = DbContext.contactype.Where(a => a.ContactType == "约定收件人").FirstOrDefault()?.id + "",
Address = dics["交易信息"]["D8"].ToString()
};
if (string.IsNullOrEmpty(clientDuty.Address))
{
throw new ServiceException("通信地址必填!");
}
clientDuty.ContactName = dics["交易信息"]["D9"].ToString();
if (string.IsNullOrEmpty(clientDuty.ContactName))
{
throw new ServiceException("联系人必填!");
}
//if (string.IsNullOrEmpty(clientDuty.ContactName))
//{
// throw new ServiceException("联系人必填!");
//}
clientDuty.PhoneNumber = dics["交易信息"]["D11"].ToString();
if (string.IsNullOrEmpty(clientDuty.PhoneNumber))
{
throw new ServiceException("交易信息中的联系电话必填!");
}
clientDuty.Email = dics["交易信息"]["D12"].ToString();
if (string.IsNullOrEmpty(clientDuty.Email))
{
throw new ServiceException("交易信息中的电子邮箱必填!");
}
clientDuty.IsReceiveEmail = string.IsNullOrEmpty(clientDuty.Email) ? 0 : 1;
clientDuty.ClientId = client.id;
var clientDutyId = DbContext.clientduty.Where(a => a.ApprovalOrder < 1 && a.ClientId == clientDuty.ClientId
&& a.ContactName == clientDuty.ContactName
&& a.ContactTypeId == clientDuty.ContactTypeId).FirstOrDefault()?.id ?? 0;
clientDuty.id = clientDutyId;
new ClientDutyService(OptUser).SaveClientDuty(clientDuty);
var clientBankCard = new ClientBankCard
{
ClientName = client.Name,
Card = dics["交易信息"]["D17"].ToString().Replace(" ", "")
};
if (string.IsNullOrEmpty(clientBankCard.Card))
{
throw new ServiceException("交易信息中的银行账户账号必填!");
}
clientBankCard.Bank = dics["交易信息"]["D18"].ToString();
if (string.IsNullOrEmpty(clientBankCard.Bank))
{
throw new ServiceException("交易信息中的银行账户开户行必填!");
}
clientBankCard.ValidState = "Valid";
clientBankCard.ClientId = client.id;
clientBankCard.id = DbContext.bankcard.Where(a => a.ApprovalOrder < 1 && a.Bank == clientBankCard.Bank && a.ClientId == clientBankCard.ClientId && a.Card == clientBankCard.Card).FirstOrDefault()?.id ?? 0;
new ClientBankCardService(OptUser).SaveBankCard(clientBankCard, out client);
var authorize = dics["授权委托"];
var clientDutieList = new List<ClientDuty>();
foreach (var row in rows)
{
var contactName = authorize[$"C{row}"].ToString();
if (string.IsNullOrEmpty(contactName))
{
continue;
}
var contactypeList = DbContext.contactype.ToList();
var contactTypeId = authorize[$"D{row}"].ToString();
if (string.IsNullOrEmpty(contactTypeId))
{
continue;
}
//A约定收件人,B交易下达人,C资金调拨人
var contactTypeDic = new Dictionary<string, string>
{
{ "A", contactypeList.Where(a => a.ContactType.Contains("签约代理人")).FirstOrDefault()?.id + "" },
{ "B", contactypeList.Where(a => a.ContactType.Contains("交易下达人")).FirstOrDefault()?.id + "" },
{ "C", contactypeList.Where(a => a.ContactType.Contains("资金调拨人")).FirstOrDefault()?.id + "" }
};
var contactTypeVal = new List<string>();
foreach (var dic in contactTypeDic.Keys)
{
if (contactTypeId.Contains(dic))
{
contactTypeVal.Add(contactTypeDic[dic]);
}
}
var idCardTypeStr = authorize[$"E{row}"].ToString();
var idCardType = 0;
if (idCardTypeStr == IdCardTypeEnum.身份证.ToString())
{
idCardType = (int)IdCardTypeEnum.身份证;
}
else if (idCardTypeStr == IdCardTypeEnum.军官证.ToString())
{
idCardType = (int)IdCardTypeEnum.军官证;
}
else if (idCardTypeStr == "回乡证(港澳)")
{
idCardType = (int)IdCardTypeEnum.港澳通行证;
}
else if (idCardTypeStr == IdCardTypeEnum.护照.ToString())
{
idCardType = (int)IdCardTypeEnum.护照;
}
else if (idCardTypeStr == IdCardTypeEnum.台胞证.ToString())
{
idCardType = (int)IdCardTypeEnum.台胞证;
}
else
{
idCardType = (int)IdCardTypeEnum.其他;
}
string idCardDateStr = authorize[$"G{row}"]?.ToString()?.Trim();
var contactTypeIds = contactTypeVal.Any() ? string.Join(",", contactTypeVal) : "";
clientDutieList.Add(new ClientDuty
{
id = DbContext.clientduty.Where(a => a.ApprovalOrder < 1 && a.ClientId == client.id
&& a.ContactName == contactName
&& a.ContactTypeId == contactTypeIds).FirstOrDefault()?.id ?? 0,
ClientId = client.id,
ContactName = contactName,
ContactTypeId = contactTypeIds,
IdCardType = idCardType,
IdCardNo = authorize[$"F{row}"].ToString(),
IdCardDate = (string.IsNullOrEmpty(idCardDateStr) || idCardDateStr == "长期") ? new DateTime(2099, 12, 31) : Convert.ToDateTime(idCardDateStr),
PhoneNumber = authorize[$"H{row}"].ToString(),
Email = authorize[$"I{row}"].ToString(),
IsReceiveEmail = string.IsNullOrEmpty(authorize[$"I{row}"].ToString()) ? 0 : 1
});
}
if (clientDutieList.Count > 0)
{
clientDutieList.ForEach(a =>
{
new ClientDutyService(OptUser).SaveClientDuty(a);
});
}
else
{
//委托授权中没有联系人时,给法人赋值所有类型
var contactypeList = DbContext.contactype.ToList();
var legalPersonTypeId = contactypeList.Where(a => a.ContactType.Contains("法人")).FirstOrDefault()?.id.ToString();
var allcontactypeIds = new List<string>
{
legalPersonTypeId,
contactypeList.Where(a => a.ContactType.Contains("签约代理人")).FirstOrDefault()?.id.ToString(),
contactypeList.Where(a => a.ContactType.Contains("约定收件人")).FirstOrDefault()?.id.ToString(),
contactypeList.Where(a => a.ContactType.Contains("交易下达人")).FirstOrDefault()?.id.ToString(),
contactypeList.Where(a => a.ContactType.Contains("资金调拨人")).FirstOrDefault()?.id.ToString()
};
var legalPerson = DbContext.clientduty.FirstOrDefault(n => n.ApprovalOrder < 1 && n.ClientId == client.id && n.ContactTypeId.Contains(legalPersonTypeId));
legalPerson.ContactTypeId = string.Join(",", allcontactypeIds);
new ClientDutyService(OptUser).SaveClientDuty(legalPerson);
}
}
}
}