TRS-ZS-566、TRS-ZS-568 客户保证金率需求完成
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user