154 lines
5.7 KiB
C#
154 lines
5.7 KiB
C#
using System.Data;
|
|
using YLErp.Model;
|
|
|
|
namespace YLErp.Modules.MarginModule
|
|
{
|
|
public class ClientMarginConfigService : YLBaseService
|
|
{
|
|
public ClientMarginConfigService(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
}
|
|
|
|
public void SaveMarginConfig(client_margin_config marginConfig)
|
|
{
|
|
if (marginConfig == null)
|
|
{
|
|
throw new ServiceException("无数据");
|
|
}
|
|
|
|
var dbMarginConfig = new client_margin_config();
|
|
dbMarginConfig.SetOpt(UserInfo);
|
|
if (marginConfig.id != 0)
|
|
{
|
|
dbMarginConfig = DbContext.clientMarginConfig.Find(marginConfig.id);
|
|
if (dbMarginConfig == null)
|
|
{
|
|
throw new ServiceException("未找到该记录");
|
|
}
|
|
dbMarginConfig.client_id = marginConfig.client_id;
|
|
dbMarginConfig.value_date = marginConfig.value_date;
|
|
|
|
if (DbContext.clientMarginConfig.Any(o => o.client_id == marginConfig.client_id
|
|
&& o.value_date == marginConfig.value_date
|
|
&& o.id != marginConfig.id))
|
|
{
|
|
throw new ServiceException("同一客户不支持在同一生效日有多条记录!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dbMarginConfig = DbContext.clientMarginConfig.Where(o => o.client_id == marginConfig.client_id
|
|
&& o.value_date == marginConfig.value_date).FirstOrDefault();
|
|
if (dbMarginConfig == null)
|
|
{
|
|
marginConfig.SetOpt(UserInfo);
|
|
DbContext.clientMarginConfig.Add(marginConfig);
|
|
}
|
|
else
|
|
{
|
|
throw new ServiceException("同一客户不支持在同一生效日有多条记录");
|
|
}
|
|
}
|
|
|
|
DbContext.SaveChanges();
|
|
}
|
|
|
|
public List<ClientMarginConfigDto> SearchList(ClientMarginConfigReq req)
|
|
{
|
|
var query = from config in DbContext.clientMarginConfig
|
|
select new ClientMarginConfigDto
|
|
{
|
|
EncryptId=config.EncryptId,
|
|
id = config.id,
|
|
client_id = config.client_id,
|
|
client_name = config.client_name,
|
|
value_date = config.value_date,
|
|
OptId = config.OptId,
|
|
OptName = config.OptName,
|
|
OptDate = config.OptDate
|
|
};
|
|
|
|
if (req.ClientId > 0)
|
|
{
|
|
query = query.Where(o => o.client_id == req.ClientId);
|
|
}
|
|
|
|
if (req.ValueDate.HasValue)
|
|
{
|
|
query = query.Where(o => o.value_date == req.ValueDate.Value);
|
|
}
|
|
|
|
var configs = query.OrderByDescending(o=>o.id).ToList();
|
|
|
|
// 为每个配置加载5条固定期限的详情数据
|
|
var fixedTerms = ConsMarginTerm.AllowedTerms.ToArray();
|
|
foreach (var config in configs)
|
|
{
|
|
var existingDetails = DbContext.clientMarginDetail.Where(d => d.config_id == config.id).ToList();
|
|
var detailDtos = new List<ClientMarginDetailDto>();
|
|
|
|
for (int i = 0; i < fixedTerms.Length; i++)
|
|
{
|
|
var term = fixedTerms[i];
|
|
var existingDetail = existingDetails.FirstOrDefault(d => d.bond_term == term);
|
|
if (existingDetail != null)
|
|
{
|
|
detailDtos.Add(new ClientMarginDetailDto
|
|
{
|
|
bond_term = existingDetail.bond_term,
|
|
init_rate = existingDetail.init_rate * 100, // 转换为百分比显示
|
|
maintain_rate = existingDetail.maintain_rate * 100, // 转换为百分比显示
|
|
swap_days = existingDetail.swap_days
|
|
});
|
|
}
|
|
else
|
|
{
|
|
detailDtos.Add(new ClientMarginDetailDto
|
|
{
|
|
bond_term = term,
|
|
init_rate = null,
|
|
maintain_rate = null,
|
|
swap_days = null
|
|
});
|
|
}
|
|
}
|
|
|
|
// 直接使用DTO格式返回给前端
|
|
config.details = detailDtos;
|
|
}
|
|
|
|
return configs;
|
|
}
|
|
|
|
public void SaveMarginConfigWithDetails(client_margin_config config, List<client_margin_detail> details)
|
|
{
|
|
using (var trans = BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
// 保存主表
|
|
SaveMarginConfig(config);
|
|
|
|
// 删除原有详情记录
|
|
var existingDetails = DbContext.clientMarginDetail.Where(d => d.config_id == config.id).ToList();
|
|
DbContext.clientMarginDetail.RemoveRange(existingDetails);
|
|
|
|
// 保存新的详情记录
|
|
foreach (var detail in details)
|
|
{
|
|
detail.config_id = config.id;
|
|
DbContext.clientMarginDetail.Add(detail);
|
|
}
|
|
|
|
DbContext.SaveChanges();
|
|
trans.Commit();
|
|
}
|
|
catch
|
|
{
|
|
trans.Rollback();
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |