159 lines
5.2 KiB
C#
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("成功");
|
|
}
|
|
}
|
|
}
|