Files
zszq-trs/YLErpDAL/Modules/MarginModule/ClientMarginConfigService.cs
T

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;
}
}
}
}
}