Files
zszq-trs/Framework/SharedWebApi/ManagerApi/TradeDealController.cs
T
2024-05-09 14:06:26 +08:00

159 lines
5.2 KiB
C#

using YLErp.DBModels.Consts;
using YLErp.Modules.EodModule;
using YLErp.Modules.TradeModule;
using YLErp.Modules.TradeModule.ApiModule;
using YLErp.Modules.TradeModule.DealModule;
using YLErp.Modules.TradeModule.OrderModule;
namespace YLWebAPI.ApiModule.ManagerApi
{
/// <summary>
/// 交易操作
/// </summary>
[ManagerAuth]
public class TradeDealController : BaseApiController
{
/// <summary>
/// 交易了结
/// </summary>
[HttpPost, Route("api/v1/tradeClose")]
public ApiResponseModel TradeClose(TradeCloseRequestModel model)
{
if (model is null)
{
return JsonError("处理请求失败:参数为null");
}
//以后转为前后端分离模式后还需要重新处理
model.ImportFlag = "WebAPI";
var result = new OtcTradeCloseService(CurUser).ExecuteClose(model);
var td = result.Trade;
var tc = result.TradeCash;
var Notional = td.Notional;
if (ConsTrade.TradeCompleteStatus.Contains(td.TradeStatus))
{
Notional = 0;
}
var TcAction = tc.ExerciseWay == TradeCashExerciseWayEnum.到期行权 ? "到期" : "终止";
var TcTradePrice = (td.TradePrice ?? 0) * (tc.UnwindPercentRate ?? 0) * (td.BuySell == "买入" ? -1 : 1);
var WinLoss = tc.Amount + TcTradePrice;
//参考OtcTradeDetail类
var ret = new
{
td.TradeNumber,
td.TradeStatus,
Notional,
TcAction,
TcValueDate = tc.HappenedDate ?? tc.ValueDate,
TcFinalPrice = tc.FinalPrice,
TcUnwindPrice = tc.UnwindPrice,
TcUnwindPricePercent = tc.UnwindPricePercentRate,
TcUnwindNotional = tc.UnwindNotional ?? tc.Notional,
TcUnwindPercent = tc.UnwindPercentRate,
TcAmount = tc.Amount,
WinLoss,
TcTradePrice
};
return JsonSuccess(ret);
}
/// <summary>
/// 组合交易主交易了结
/// </summary>
[HttpPost, Route("api/v1/trade/group_options_close_start")]
public ApiResponseModel TradeGroupClose([FromBody] TradeGroupCloseRequest req)
{
if (req is null)
{
return JsonError("处理请求失败:参数为null");
}
new TradeGroupCloseService(CurUser).ExecuteCloseStart(req);
return JsonSuccessInfo("操作成功");
}
/// <summary>
/// 完成组合交易了结
/// </summary>
[HttpPost, Route("api/v1/trade/group_options_close_complete")]
public ApiResponseModel FinishGroupTradeCash([FromBody] TradeGroupCloseRequest req)
{
using (var DbContext = YLErp.Modules.DbContextFactory.GetYLDbContext())
{
var trade = DbContext.trade.FirstOrDefault(x => x.TradeNumber == req.TradeNumber);
if (trade == null)
{
return JsonError("未找到该交易编号对应的交易");
}
var tradeCash = DbContext.trade_cash.OrderByDescending(x => x.id).FirstOrDefault(x => x.TradeId == trade.id && x.ValidState != "InValid" && x.Status == null && x.Action != "系统操作-期权费");
if (tradeCash == null)
{
return JsonError("未找到该组合交易未完成的了结记录");
}
new TradeUnwindService(CurUser).FinishGroupTradeCash(tradeCash.id);
return JsonSuccessInfo("已完成");
}
}
/// <summary>
/// 期权交易-设置日终观察价格
/// </summary>
[HttpPost, Route("api/v1/trade/option/setObservationPrice")]
public ApiResponseModel TradeSetObservationPrice(SetObservationPriceApiRequest req)
{
if (req is null)
{
return JsonError("处理请求失败:参数为null");
}
new ManuallyTradeObservationPriceService(CurUser).SetObservationPriceApi(req);
return JsonSuccess();
}
/// <summary>
/// 撤回交易了结审核
/// </summary>
[HttpPost, Route("api/v1/trade/withdrawCloseApproval")]
public ApiResponseModel WithdrawCloseApproval(SingleTradeQueryModel model)
{
if (model is null)
{
return JsonError("处理请求失败:参数为null");
}
new TradeRevokeService(CurUser).TradeRevoke(model.TradeNumber);
return JsonSuccessInfo("成功");
}
/// <summary>
/// 交易无效操作
/// </summary>
[HttpPost, Route("api/v1/trade/invalid")]
public ApiResponseModel TradeInvalid(TradeInvalidRequest request)
{
if (request is null)
{
return JsonError("缺少必要的输入参数");
}
new TradeInvalidService(CurUser).InvalidTrade(request.TradeNumber, true);
return JsonSuccess("成功");
}
}
}