using BaseOUDAL; using System.Data; using YieldChain.Helpers; using YLErp.Commons; using YLErp.Helpers; using YLErp.Model.Enum; namespace YLErp.Modules.ClientModule { /// /// 客户产品投资人服务 /// public partial class ClientInvestorService : ClientBaseService { public ClientInvestorService(OptUserInfo userInfo) : base(userInfo) { } /// /// 查询ClientInvestor /// public SearchListResult SearchList(ClientInvestorReq req) { var query = DbContext.ClientInvestor.AsNoTracking().AsQueryable(); if (!string.IsNullOrEmpty(req.Investor)) { query = query.Where(d => d.Investor.Contains(req.Investor)); } if (!string.IsNullOrEmpty(req.EligibilityType)) { query = query.Where(d => d.EligibilityType.Contains(req.EligibilityType)); } if (req.ClientId != null) { query = query.Where(d => d.ClientId == req.ClientId); } if (!string.IsNullOrEmpty(req.ClientName)) { query = query.Where(d => d.ClientName.Contains(req.ClientName)); } if (req.OptId != null) { query = query.Where(d => d.OptId == req.OptId); } if (!string.IsNullOrEmpty(req.OptName)) { query = query.Where(d => d.OptName.Contains(req.OptName)); } if (req.OptDateStart != DateTime.MinValue) { query = query.Where(d => d.OptDate >= req.OptDateStart); } if (req.OptDateEnd != DateTime.MinValue) { var OptDateTemp = req.OptDateEnd.AddDays(1); query = query.Where(d => d.OptDate < OptDateTemp); } if (string.IsNullOrEmpty(req.sidx)) { req.sidx = "id"; req.sord = "desc"; } var retListResult = query.ToSearchList(req); return retListResult; } /// /// 保存产品投资人数据 /// public ClientInvestor SaveInvestor(HashSet updatedPropertyNameSet, ClientInvestor req, out Client client) { return InnerSaveInvestor(updatedPropertyNameSet, req, out client, false); } private ClientInvestor InnerSaveInvestor(HashSet updatedPropertyNameSet, ClientInvestor req, out Client client, bool doInvalid) { ClientInvestor dbmodel; var changeStr = string.Empty; client = req.ClientId > 0 ? DbContext.client.Find(req.ClientId) : null; if (client == null) { throw new ServiceException("没有找到客户数据"); } checkInvestor(req, client); //新增 if (req.id < 1) { DbContext.ClientInvestor.Add(dbmodel = new ClientInvestor()); DbContext.ClientAuditLog.Add(new ClientAuditLog { ClientId = req.ClientId ?? 0, OptType = "新建产品投资人", Changes = string.Empty, DataType = "00", OptId = UserId, OptName = UserName, OptDate = OptDate }); } else { dbmodel = DbContext.ClientInvestor.Find(req.id); if (dbmodel == null) { throw new ServiceException("未找到对应的产品投资人信息,请刷新后再试!"); } if (doInvalid && req.ValidState == dbmodel.ValidState) { return dbmodel; } changeStr = DataChangeHelper.GetDataChanges(dbmodel, req).ToJson(); } ObjectHelper.MapValues(dbmodel, req, updatedPropertyNameSet); SetDBModelOpt(dbmodel); if (req.id > 0) { DbContext.ClientAuditLog.Add(new ClientAuditLog { ClientId = dbmodel.ClientId ?? 0, OptType = "编辑产品投资人", Changes = changeStr, DataType = "C02", OptId = UserId, OptName = UserName, OptDate = OptDate }); } DbContext.SaveChanges(); return dbmodel; } /// /// 投资人检查 /// /// /// /// private bool checkInvestor(ClientInvestor req, Client client) { //产品用户投资者,如果存在收益互换权限 只有专业投资者权益百分比可以大于20% if (client.ClientType == ClientTypeEnum.产品.ToString() && client.DerivativesInvestmentVarieties.Contains((int)DerivativesInvestmentVarietiesEnum.场外互换 + "") && !"专业投资者".Equals(req.EligibilityType) && req.ShareRate > 0.2) { throw new ServiceException("本产品客户,存在非专业投资人权益比例大于20%情况,无法进行场外互换交易!"); } return true; } /// /// 导出产品投资人数据到EXCEL文件 /// public byte[] ExportInvestorsToExcel(IEnumerable clientIds) { var ret = DbContext.ClientInvestor.AsNoTracking().AsQueryable().Where(o => clientIds.Contains(o.ClientId ?? 0)).OrderBy(o => o.ClientName).ToList(); var dc = new List { new ExcelHelper.DataColumnModel("客户名称", "ClientId", (cv, obj) => { var id = (int?)cv ?? 0; return DbContext.client.Where(o => o.id == id).FirstOrDefault().Name; }), new ExcelHelper.DataColumnModel("投资人", "Investor"), new ExcelHelper.DataColumnModel("适当性类型", "EligibilityType"), new ExcelHelper.DataColumnModel("权益占比", "ShareRate"), new ExcelHelper.DataColumnModel("是否有效", "ValidState", (cv, obj) => { if (cv == "InValid") { return "无效"; } return "有效"; }), new ExcelHelper.DataColumnModel("客户备注", "Comments") }; new ExcelHelper().ListToExcel(dc.ToArray(), ret, "客户产品投资人信息", true, out var buffer); return buffer; } } /// /// 客户产品投资人查询请求 /// public class ClientInvestorReq : BaseSearchReq { /// /// 投资人 /// public string Investor { get; set; } /// /// 适当性类型 /// public string EligibilityType { get; set; } /// /// 权益占比 /// public string ShareRate { get; set; } /// /// 客户信息 /// public int? ClientId { get; set; } /// /// 客户名称 /// public string ClientName { get; set; } /// /// 操作者_optid /// public int? OptId { get; set; } /// /// 操作者_optname /// public string OptName { get; set; } /// /// 操作日期_createdate /// public DateTime? OptDate { get; set; } public DateTime OptDateStart { get; set; } public DateTime OptDateEnd { get; set; } public string Comments { get; set; } } }