Files
zszq-trs/YLErpDAL/Modules/UnderlyingModule/UnderlyingDividendService.cs
T
2024-05-09 14:06:26 +08:00

147 lines
5.1 KiB
C#

using BaseOUDAL;
namespace YLErp.Modules.UnderlyingModule
{
/// <summary>
/// 分红率服务
/// </summary>
public class UnderlyingDividendService : YLBaseService
{
public UnderlyingDividendService(OptUserInfo userInfo) : base(userInfo)
{
}
/// <summary>
/// 获取最新分红率
/// </summary>
public SearchListResult<UnderlyingDividendDto> GetLatestList(UnderlyingDividendQueryModel req)
{
var predicat = PredicateBuilder.Create<underlying_manager>(n => (n.UnderlyingInstrumentType == "Stock" || n.UnderlyingInstrumentType == "StockIndex"));
if (!string.IsNullOrWhiteSpace(req.UnderlyingCode))
{
predicat = predicat.And(n => n.UnderlyingCode.Contains(req.UnderlyingCode));
}
if (!string.IsNullOrWhiteSpace(req.UnderlyingName))
{
predicat = predicat.And(n => n.UnderlyingName.Contains(req.UnderlyingName));
}
var query = DbContext.underlying_manager
.Where(predicat)
.Select(n => new UnderlyingDividendDto
{
id = n.id,
UnderlyingId = n.id,
UnderlyingCode = n.UnderlyingCode,
UnderlyingName = n.UnderlyingName,
DividendRate = n.DividendRate ?? 0
});
if (string.IsNullOrEmpty(req.sidx))
{
query = query.OrderBy(n => n.UnderlyingCode);
}
return query.ToSearchList(req);
}
/// <summary>
/// 获取历史分红率
/// </summary>
public IEnumerable<UnderlyingDividendDto> GetHisList(string underlyingCode)
{
if (string.IsNullOrEmpty(underlyingCode))
{
return Enumerable.Empty<UnderlyingDividendDto>();
}
var query = from m in DbContext.underlying_manager
join n in DbContext.UnderlyingDividend on m.id equals n.UnderlyingId
where m.UnderlyingCode == underlyingCode
orderby n.ValueDate descending
select new UnderlyingDividendDto
{
id = n.id,
UnderlyingId = n.id,
UnderlyingCode = m.UnderlyingCode,
UnderlyingName = m.UnderlyingName,
DividendRate = n.DividendRate,
ValueDate = n.ValueDate,
OptDate = n.OptDate,
OptId = n.OptId,
OptName = n.OptName
};
return query.ToArray();
}
/// <summary>
/// 获取最新分红率
/// </summary>
public UnderlyingDividendDto GetLatestDetail(string underlyingCode)
{
var query = DbContext.underlying_manager
.Where(n => n.UnderlyingCode == underlyingCode)
.Select(n => new UnderlyingDividendDto
{
id = n.id,
UnderlyingId = n.id,
UnderlyingCode = n.UnderlyingCode,
UnderlyingName = n.UnderlyingName,
DividendRate = n.DividendRate ?? 0
});
return query.FirstOrDefault();
}
/// <summary>
/// 保存分红率
/// </summary>
public UnderlyingDividend SaveData(UnderlyingDividendDto model)
{
if (string.IsNullOrEmpty(model?.UnderlyingCode))
{
throw new ServiceException("股票代码不能为空");
}
var udm = DbContext.underlying_manager.FirstOrDefault(n => n.UnderlyingCode == model.UnderlyingCode);
if (udm == null)
{
throw new ServiceException("股票信息不存在");
}
udm.DividendRate = model.DividendRate;
var valueDate = BLL.valuedateBLL.ValueDate;
if (valueDate < DateTime.Today) valueDate = DateTime.Today;
var dbModel = DbContext.UnderlyingDividend.FirstOrDefault(n => n.UnderlyingId == udm.id && n.ValueDate == valueDate);
if (dbModel == null)
{
dbModel = new UnderlyingDividend
{
UnderlyingId = udm.id,
ValueDate = valueDate
};
DbContext.UnderlyingDividend.Add(dbModel);
}
dbModel.DividendRate = model.DividendRate;
dbModel.OptId = model.OptId;
dbModel.OptName = model.OptName;
dbModel.OptDate = DateTime.Now;
DbContext.SaveChanges();
return dbModel;
}
}
/// <summary>
///
/// </summary>
public class UnderlyingDividendQueryModel : BaseSearchReq
{
public string UnderlyingName { get; set; }
public string UnderlyingCode { get; set; }
}
}