147 lines
5.1 KiB
C#
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; }
|
|
}
|
|
}
|