Files
zszq-trs/YLErpWeb/Controllers/BondPaymentController.cs
T

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