505 lines
20 KiB
C#
505 lines
20 KiB
C#
using BaseOUDAL;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using YLErp.Commons;
|
|
using YLErp.Model;
|
|
using YLErp.Model.Enum;
|
|
using YLErp.Modules.ClientModule.Models;
|
|
using YLErp.Modules.SystemModule;
|
|
using static YLErp.Commons.ExcelHelper;
|
|
|
|
namespace YLErp.Modules.ClientModule
|
|
{
|
|
public class ClientDataService : ClientBaseService
|
|
{
|
|
public ClientDataService(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据客户名称获取客户ID
|
|
/// </summary>
|
|
public int[] GetClientIdByName(string clientName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(clientName))
|
|
{
|
|
return Array.Empty<int>();
|
|
}
|
|
|
|
clientName = clientName.Trim();
|
|
|
|
return DbContext.client.Where(n => n.Name == clientName).Select(n => n.id).ToArray();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 根据客户Id判断客户是否存在
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public bool ExsistById(int id)
|
|
{
|
|
return DbContext.client.AsNoTracking().Any(p => p.id == id);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 根据客户编号获取客户ID
|
|
/// </summary>
|
|
public int[] GetClientIdByNumber(string clientNumber)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(clientNumber))
|
|
{
|
|
return Array.Empty<int>();
|
|
}
|
|
|
|
clientNumber = clientNumber.Trim();
|
|
|
|
return DbContext.client.Where(n => n.Number == clientNumber).Select(n => n.id).ToArray();
|
|
}
|
|
|
|
public int GetClientIdByclientNumber(string clientNumber)
|
|
{
|
|
var clientIds = GetClientIdByNumber(clientNumber);
|
|
if (clientIds.Length > 0)
|
|
{
|
|
return clientIds[0];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据客户ID获取客户编号
|
|
/// </summary>
|
|
public Client GetClientById(int clientId)
|
|
{
|
|
return DbContext.client.Where(n => n.id == clientId).FirstOrDefault();
|
|
}
|
|
|
|
public List<int> GetClientIds()
|
|
{
|
|
var clients = DbContext.client.AsQueryable().ToList();
|
|
return GetClientsByCustomerManager(clients, true).Select(c => c.id).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 有客户经理角色,则找到客户经理下面的客户
|
|
/// 没有客户经理角色,如果需要返回全部,则返回全部客户,否则返回空客户
|
|
/// </summary>
|
|
/// <param name="clients"></param>
|
|
/// <param name="IsAll"></param>
|
|
/// <returns></returns>
|
|
public List<Client> GetClientsByCustomerManager(List<Client> clients, bool IsAll)
|
|
{
|
|
if ((UserBLL.GetAccountPostEnum(OptUser.UserId) & (int)AccountPostEnum.客户经理) > 0)
|
|
{
|
|
var systemUserIds = UserBLL.GetChildrenSystemUsers(OptUser.UserId, false).Select(a => a.Id).ToList();
|
|
return clients.Where(a => systemUserIds.Any(b => a.CustomerManagerIdsInt.Contains(b))).ToList();
|
|
}
|
|
|
|
if (IsAll)
|
|
{
|
|
return clients;
|
|
}
|
|
else
|
|
{
|
|
return new List<Client>();
|
|
}
|
|
}
|
|
|
|
public List<int> GetClientsByCustomerManager(List<ClientManagerDto> clients, bool IsAll)
|
|
{
|
|
if ((UserBLL.GetAccountPostEnum(OptUser.UserId) & (int)AccountPostEnum.客户经理) > 0)
|
|
{
|
|
var systemUserIds = UserBLL.GetChildrenSystemUsers(OptUser.UserId, false).Select(a => a.Id).ToList();
|
|
return clients.Where(a => systemUserIds.Any(b => a.CustomerManagerIdsInt.Contains(b))).Select(p => p.Id).Distinct().ToList();
|
|
}
|
|
|
|
if (IsAll)
|
|
{
|
|
return clients.Select(p => p.Id).Distinct().ToList();
|
|
}
|
|
else
|
|
{
|
|
return new List<int>();
|
|
}
|
|
}
|
|
|
|
|
|
#region 浙期-导出客户信息的3张表合并到1个excel
|
|
/// <summary>
|
|
/// 浙期-导出3个客户表数据合并处理
|
|
/// </summary>
|
|
/// <param name="clientIds"></param>
|
|
/// <returns></returns>
|
|
public byte[] exprotClientAllExcel(List<ClientLinq> clientList, List<ClientField> colList)
|
|
{
|
|
//获取配置的客户基础字段
|
|
//var colList = ClientEditConfigService.GetClientList();
|
|
|
|
//yldb.configcolumn.FirstOrDefault(o=>o.userid == )
|
|
|
|
var dc = new List<DataColumnModel>();
|
|
|
|
#region 基本信息
|
|
var styleBase = new ExcelStyle()
|
|
{
|
|
BackgroundColor = Color.FromArgb(255, 255, 255),
|
|
ForegroundColor = Color.FromArgb(0, 0, 0),
|
|
BorderColor = Color.FromArgb(0, 0, 0)
|
|
};
|
|
var basicFieldCount = 0;
|
|
var basicFieldList = new List<DataColumnModel>();
|
|
|
|
var colNameList = new List<string>();
|
|
foreach (var col in colList)
|
|
{
|
|
//已隐藏的,label为空的,过滤掉
|
|
if (col.hidden || string.IsNullOrEmpty(col.label))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (col.name == "ClientName")
|
|
{
|
|
col.name = "Name";
|
|
col.label = "客户名称";
|
|
}
|
|
else if (col.name == "Name")
|
|
{
|
|
col.name = "Name";
|
|
col.label = "客户名称";
|
|
}
|
|
|
|
|
|
basicFieldList.Add(new DataColumnModel(col.label, col.name, typeof(string)));
|
|
colNameList.Add(col.name);
|
|
}
|
|
basicFieldList.Add(new DataColumnModel("客户状态", "ProcessStatus", typeof(string)));
|
|
basicFieldList.Add(new DataColumnModel("期权费授信", "IsTradeCredit", typeof(string)));
|
|
colNameList.Add("ProcessStatus"); colNameList.Add("IsTradeCredit");
|
|
|
|
dc.AddRange(basicFieldList.Select(x =>
|
|
{
|
|
x.Style = styleBase;
|
|
return x;
|
|
}));
|
|
basicFieldCount = basicFieldList.Count();
|
|
#endregion
|
|
|
|
#region 人员信息
|
|
var styleContact = new ExcelStyle()
|
|
{
|
|
BackgroundColor = Color.FromArgb(221, 235, 247),
|
|
ForegroundColor = Color.FromArgb(0, 0, 0),
|
|
BorderColor = Color.FromArgb(0, 0, 0)
|
|
};
|
|
var contactFieldConut = 0;
|
|
var contactFieldList = new DataColumnModel[]
|
|
{
|
|
new DataColumnModel("客户名称", "ClientName_Contact",typeof(string)),
|
|
new DataColumnModel("姓名", "ContactName_Contact", typeof(string)),
|
|
new DataColumnModel("职责类型", "ContactType",typeof(string)),
|
|
new DataColumnModel("证件类型", "IdCardType" ,typeof(string)),
|
|
new DataColumnModel("证件号码", "IdCardNo", typeof(string)),
|
|
new DataColumnModel("电子邮箱", "Email_Contact", typeof(string)),
|
|
new DataColumnModel("是否接收相关邮件", "IsReceiveEmail", typeof(string)),
|
|
new DataColumnModel("联系电话", "PhoneNumber", typeof(string)),
|
|
new DataColumnModel("传真", "Fax", typeof(string)),
|
|
new DataColumnModel("联系地址", "Address_Contact", typeof(string))
|
|
};
|
|
|
|
dc.AddRange(contactFieldList.Select(x =>
|
|
{
|
|
x.Style = styleContact;
|
|
return x;
|
|
}));
|
|
contactFieldConut = contactFieldList.Count();
|
|
#endregion
|
|
|
|
#region 银行信息
|
|
var styleBank = new ExcelStyle()
|
|
{
|
|
BackgroundColor = Color.FromArgb(244, 176, 132),
|
|
ForegroundColor = Color.FromArgb(0, 0, 0),
|
|
BorderColor = Color.FromArgb(0, 0, 0)
|
|
};
|
|
var bankFieldCount = 0;
|
|
var bankFieldList = new DataColumnModel[]
|
|
{
|
|
new DataColumnModel("客户名称", "ClientName_Bank",typeof(string)),
|
|
new DataColumnModel("开户行", "Bank",typeof(string)),
|
|
new DataColumnModel("账号", "Card",typeof(string)),
|
|
new DataColumnModel("户名", "AccountName",typeof(string)),
|
|
new DataColumnModel("大额行号", "Payment",typeof(string)),
|
|
new DataColumnModel("是否有效", "ValidState_Bank",typeof(string)),
|
|
new DataColumnModel("客户备注", "Comments",typeof(string))
|
|
};
|
|
dc.AddRange(bankFieldList.Select(x =>
|
|
{
|
|
x.Style = styleBank;
|
|
return x;
|
|
}));
|
|
bankFieldCount = bankFieldList.Count();
|
|
#endregion
|
|
|
|
var dataGroupModelList = new List<DataGroupModel>
|
|
{
|
|
new DataGroupModel{
|
|
Caption="客户基本信息",
|
|
Length=basicFieldCount,
|
|
Style = new ExcelStyle(){ BackgroundColor =Color.FromArgb(255, 255, 255),ForegroundColor = Color.Black,BorderColor = Color.Black}
|
|
},
|
|
new DataGroupModel{
|
|
Caption="客户人员信息",
|
|
Length=contactFieldConut,
|
|
Style = new ExcelStyle(){ BackgroundColor =Color.FromArgb(221, 235, 247),ForegroundColor = Color.Black,BorderColor = Color.Black}
|
|
},
|
|
new DataGroupModel{
|
|
Caption="银行账号信息",
|
|
Length=bankFieldCount,
|
|
Style = new ExcelStyle(){ BackgroundColor =Color.FromArgb(244, 176, 132),ForegroundColor = Color.Black,BorderColor = Color.Black}
|
|
}
|
|
};
|
|
|
|
//获取数据
|
|
var ret = getExprotClientData(clientList, colNameList);
|
|
|
|
|
|
new ExcelHelper().ListToExcel<Dictionary<string, string>>(dc.ToArray(), ret, "客户合并信息", true, out var buffer, true, dataGroupModelList.ToArray());
|
|
return buffer;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 浙期 - 处理需要导出的客户数据
|
|
/// </summary>
|
|
/// <param name="clientIds"></param>
|
|
/// <returns></returns>
|
|
private List<Dictionary<string, string>> getExprotClientData(List<ClientLinq> clientList, List<string> colNameList)
|
|
{
|
|
var clientIds = clientList.Select(o => o.id);
|
|
var clientdutyList = DbContext.clientduty.AsNoTracking().AsQueryable().Where(o => o.ApprovalOrder < 1 && clientIds.Contains(o.ClientId ?? 0)).OrderBy(o => o.ClientId).ToList();
|
|
var bankcardList = DbContext.bankcard.AsNoTracking().AsQueryable().Where(o => o.ApprovalOrder < 1 && clientIds.Contains(o.ClientId ?? 0)).OrderBy(o => o.ClientName).ToList();
|
|
var meteDics = DbContext.ClientMeta.AsNoTracking().AsQueryable().Where(o => clientIds.Contains(o.ClientId)).OrderBy(o => o.ClientId).ToList();
|
|
var ret = new List<Dictionary<string, string>>();
|
|
var propertity = typeof(ClientLinq).GetProperties();
|
|
foreach (var cItem in clientList)
|
|
{
|
|
var curClientDuty = clientdutyList.Where(o => o.ClientId == cItem.id).ToList();
|
|
var bankCard = bankcardList.Where(o => o.ClientId == cItem.id).ToList();
|
|
//当前客户需循环的次数
|
|
var index = curClientDuty.Count > bankCard.Count ? curClientDuty.Count : bankCard.Count;
|
|
if (index == 0)
|
|
{
|
|
index = 1;
|
|
}
|
|
for (int i = 0; i < index; i++)
|
|
{
|
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
|
foreach (var colName in colNameList)
|
|
{
|
|
//第一条时,客户基本信息赋值
|
|
if (i == 0)
|
|
{
|
|
var p = propertity.Where(O => O.Name == colName).FirstOrDefault();
|
|
if (p == null)
|
|
{
|
|
if (colName.Contains("meta"))
|
|
{
|
|
var cMeteDic = meteDics.Where(o => o.ClientId == cItem.id).ToList();
|
|
|
|
var meteName = colName.Replace("meta_", "");
|
|
dic[colName] = cMeteDic.FirstOrDefault(o => o.MetaKey == meteName)?.MetaValue;
|
|
}
|
|
else if (colName.Contains("Str") || colName.Contains("str") || colName.Contains("STR"))
|
|
{
|
|
var colName2 = colName.Replace("Str", "").Replace("str", "").Replace("STR", "");
|
|
var p2 = propertity.Where(O => O.Name == colName2).FirstOrDefault();
|
|
dic[colName] = procPropertyType(p2, cItem);
|
|
}
|
|
else
|
|
{
|
|
dic[colName] = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dic[colName] = procPropertyType(p, cItem);
|
|
}
|
|
}
|
|
//客户基本信息赋值为空
|
|
else
|
|
{
|
|
dic[colName] = "";
|
|
}
|
|
}
|
|
//人员信息
|
|
if (i < curClientDuty.Count() && curClientDuty[i] != null)
|
|
{
|
|
dic["ClientName_Contact"] = cItem.Name;
|
|
dic["ContactName_Contact"] = curClientDuty[i].ContactName;
|
|
|
|
var dutyTypes = curClientDuty[i].ContactTypeId.Split(',').ToList();
|
|
var result = DbContext.contactype.Where(o => dutyTypes.Contains(o.id.ToString())).Select(o => o.ContactType).ToList();
|
|
dic["ContactType"] = string.Join(",", result);
|
|
|
|
if (curClientDuty[i].IdCardType != null)
|
|
{
|
|
dic["IdCardType"] = Enum.GetName(typeof(IdCardTypeEnum), curClientDuty[i].IdCardType);
|
|
}
|
|
else
|
|
{
|
|
dic["IdCardType"] = "";
|
|
}
|
|
|
|
dic["IdCardNo"] = curClientDuty[i].IdCardNo;
|
|
dic["Email_Contact"] = curClientDuty[i].Email;
|
|
dic["IsReceiveEmail"] = curClientDuty[i].IsReceiveEmail == 1 ? "是" : "否";
|
|
dic["PhoneNumber"] = curClientDuty[i].PhoneNumber;
|
|
dic["Fax"] = curClientDuty[i].Fax;
|
|
dic["Address_Contact"] = curClientDuty[i].Address;
|
|
}
|
|
else
|
|
{
|
|
dic["ClientName_Contact"] = "";
|
|
dic["ContactName_Contact"] = "";
|
|
dic["ContactType"] = "";
|
|
dic["IdCardType"] = "";
|
|
dic["IdCardNo"] = "";
|
|
dic["Email_Contact"] = "";
|
|
dic["IsReceiveEmail"] = "";
|
|
dic["PhoneNumber"] = "";
|
|
dic["Fax"] = "";
|
|
dic["Address_Contact"] = "";
|
|
}
|
|
|
|
//银行信息
|
|
if (i < bankCard.Count() && bankCard[i] != null)
|
|
{
|
|
dic["ClientName_Bank"] = cItem.Name;
|
|
dic["Bank"] = bankCard[i].Bank;
|
|
dic["Card"] = bankCard[i].Card;
|
|
dic["AccountName"] = cItem.Name;
|
|
dic["Payment"] = bankCard[i].Payment;
|
|
dic["ValidState_Bank"] = bankCard[i].ValidState == "InValid" ? "无效" : "有效";
|
|
dic["Comments"] = bankCard[i].Comments;
|
|
}
|
|
else
|
|
{
|
|
dic["ClientName_Bank"] = "";
|
|
dic["Bank"] = "";
|
|
dic["Card"] = "";
|
|
dic["AccountName"] = "";
|
|
dic["Payment"] = "";
|
|
dic["ValidState_Bank"] = "";
|
|
dic["Comments"] = "";
|
|
}
|
|
ret.Add(dic);
|
|
}
|
|
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 客户数据源处理
|
|
/// </summary>
|
|
/// <param name="p"></param>
|
|
/// <param name="client"></param>
|
|
/// <returns></returns>
|
|
private string procPropertyType(System.Reflection.PropertyInfo p, ClientLinq client)
|
|
{
|
|
var resultVal = "";
|
|
var pType = p.PropertyType;
|
|
if (pType == typeof(string))
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString() ?? "";
|
|
}
|
|
else if (pType.IsEnum)
|
|
{
|
|
resultVal = Enum.Parse(pType, p.GetValue(client)?.ToString() ?? "").ToString();
|
|
if (p.Name == "TradingInstType")
|
|
{
|
|
switch (resultVal.ToLower())
|
|
{
|
|
case "none": resultVal = "全部"; break;
|
|
case "equity": resultVal = "权益类"; break;
|
|
case "commodity": resultVal = "商品类"; break;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else if (pType == typeof(bool) || pType == typeof(bool?))
|
|
{
|
|
if (p.GetValue(client) == null)
|
|
{
|
|
if (p.Name == "AgreementBookType")
|
|
{
|
|
resultVal = "单向";
|
|
}
|
|
else
|
|
{
|
|
resultVal = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (p.Name == "AgreementBookType")
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString() == "true" ? "单向" : "双向";
|
|
}
|
|
else
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString() == "true" ? "是" : "否";
|
|
}
|
|
}
|
|
}
|
|
else if (pType == typeof(double) || pType == typeof(double?))
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString();
|
|
}
|
|
else if (pType == typeof(int) || pType == typeof(int?))
|
|
{
|
|
if (p.GetValue(client) == null)
|
|
{
|
|
if (p.Name == "MarginOptionType")
|
|
{
|
|
resultVal = "单向追保";
|
|
}
|
|
else
|
|
{
|
|
resultVal = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (p.Name == "MarginOptionType")
|
|
{
|
|
switch (p.GetValue(client)?.ToString())
|
|
{
|
|
case "0": resultVal = "单向追保"; break;
|
|
case "1": resultVal = "双向追保"; break;
|
|
case "2": resultVal = "对手方单向追保"; break;
|
|
case "3": resultVal = "其他"; break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString() == "1" ? "是" : "否";
|
|
}
|
|
}
|
|
}
|
|
else if (pType == typeof(DateTime) || pType == typeof(DateTime?))
|
|
{
|
|
resultVal = p.GetValue(client)?.ToString();
|
|
}
|
|
|
|
return resultVal;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|