117 lines
4.3 KiB
C#
117 lines
4.3 KiB
C#
using Org.BouncyCastle.Ocsp;
|
|
using YLErp.DBModels;
|
|
using YLErp.Modules.EodModule;
|
|
|
|
namespace YLErp.Web.Controllers
|
|
{
|
|
public class BondPaymentController : BaseController
|
|
{
|
|
readonly IViewRenderService _viewRenderer;
|
|
|
|
public BondPaymentController(IViewRenderService viewRenderer)
|
|
{
|
|
_viewRenderer = viewRenderer;
|
|
}
|
|
|
|
[MyAuthorize("结算管理-债券付息数据查看")]
|
|
public ActionResult BondPaymentList()
|
|
{
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public JsonResult BondPaymentQuery(BondPaymentReq req)
|
|
{
|
|
var sList = new BondPaymentService(CurUser).SearchList(req);
|
|
return Json(sList);
|
|
}
|
|
|
|
public ActionResult BondPaymentView(string enid)
|
|
{
|
|
var intid = DecryptLong(enid);
|
|
var r = yldb.bondPayment.Find(intid);
|
|
var um = yldb.underlying_manager.FirstOrDefault(x => x.UnderlyingCode == r.underlyingCode);
|
|
r.symbol = um?.UnderlyingName;
|
|
r.security_id = um?.UnderlyingCode;
|
|
return View(r);
|
|
}
|
|
|
|
public ActionResult BondPaymentEdit(string enid)
|
|
{
|
|
if (string.IsNullOrEmpty(enid) || enid == "0")
|
|
{
|
|
return View(new BondPayment());
|
|
}
|
|
var intid = DecryptLong(enid);
|
|
var dbmodel = yldb.bondPayment.Find(intid);
|
|
if (dbmodel == null)
|
|
{
|
|
return ShowError("找不到数据");
|
|
}
|
|
var um = yldb.underlying_manager.FirstOrDefault(x => x.UnderlyingCode == dbmodel.security_id);
|
|
dbmodel.symbol = um?.UnderlyingName;
|
|
return View(dbmodel);
|
|
}
|
|
|
|
public JsonResult BondPaymentEditJson(BondPayment req)
|
|
{
|
|
if (!string.IsNullOrEmpty(req.EncryptId))
|
|
{
|
|
req.id = DecryptLong(req.EncryptId);
|
|
}
|
|
var r = new BondPaymentService(CurUser).SaveBondPayment(req);
|
|
|
|
return JsonSuccess("更新成功", r);
|
|
}
|
|
|
|
[HttpPost]
|
|
public JsonResult DeletBondPayment(string id)
|
|
{
|
|
var intid = DecryptLong(id);
|
|
var r = yldb.bondPayment.Find(intid);
|
|
if (r == null)
|
|
{
|
|
return JsonError("找不到债券期间付息信息");
|
|
}
|
|
yldb.bondPayment.Remove(r);
|
|
yldb.SaveChanges();
|
|
return JsonSuccess("删除成功");
|
|
}
|
|
/// <summary>
|
|
/// 获取某债券期间付息,扣除当天已消费部分
|
|
/// </summary>
|
|
/// <param name="startDate"></param>
|
|
/// <param name="endDate"></param>
|
|
/// <param name="underlyingCode"></param>
|
|
/// <param name="tradeId">交易ID(可选,用于扣除已消费分红)</param>
|
|
/// <param name="unwindDate">结算日期(可选)</param>
|
|
/// <returns></returns>
|
|
public JsonResult GetBondPayMentInterest(DateTime startDate, DateTime endDate, string underlyingCode, int? tradeId = null, DateTime? unwindDate = null)
|
|
{
|
|
var payments = new BondPaymentService(CurUser).GetBondPayments(underlyingCode, startDate, endDate);
|
|
decimal totalInterest = payments.Sum(s => s.payment_interest ?? 0) * 0.01m;
|
|
|
|
// 考虑增值税,与 EOD UpdateEodPosition 口径一致
|
|
var um = yldb.underlying_manager.FirstOrDefault(x => x.UnderlyingCode == underlyingCode);
|
|
if (um != null)
|
|
{
|
|
decimal tax = um.ValueAddedTax ?? 0;
|
|
totalInterest = totalInterest / (1 + tax) * (1 - tax);
|
|
}
|
|
|
|
decimal consumedDividend = 0;
|
|
if (tradeId.HasValue)
|
|
{
|
|
List<int> swapEventTypes = new List<int>() { (int)SwapEventTypeEnum.互换, (int)SwapEventTypeEnum.自动互换,(int)SwapEventTypeEnum.平仓 };
|
|
consumedDividend = yldb.swap_flow_event
|
|
.Where(x => x.SwapTradeId == tradeId.Value
|
|
&& swapEventTypes.Contains(x.EventType)
|
|
&& x.DataState == (int)SwapFlowDateStateEnum.完成)
|
|
.Sum(s => s.DividendIn);
|
|
}
|
|
|
|
return JsonSuccess("", new { totalInterest, consumedDividend });
|
|
}
|
|
}
|
|
}
|