182 lines
6.3 KiB
C#
182 lines
6.3 KiB
C#
using Newtonsoft.Json;
|
|
using SharedWebApi.Filter;
|
|
using YLErp;
|
|
using YLErp.BLL.Eod;
|
|
using YLErp.BLL.EodSettlement;
|
|
using YLErp.Modules.EodModule.QueryModule;
|
|
|
|
namespace YLWebAPI.ApiModule.ManagerApi
|
|
{
|
|
/// <summary>
|
|
/// 清算API
|
|
/// </summary>
|
|
[ManagerAuth]
|
|
public class SettlementController : BaseApiController
|
|
{
|
|
/// <summary>
|
|
/// 日终结算信息
|
|
/// </summary>
|
|
[HttpPost, Route("api/v1/settlement/ready_info")]
|
|
public ApiResponseModel ReadyInfo([FromBody] SettlementReadyInfoReuqest req)
|
|
{
|
|
if (req is null)
|
|
{
|
|
return JsonError("处理请求失败:参数为null");
|
|
}
|
|
|
|
var lastDate = EodOperationBase.GetLastSettlementDate(req.ValueDate ?? YLErp.BLL.valuedateBLL.ValueDate);
|
|
var eodstatus = YLErp.Modules.DbContextFactory.GetYLDbContext().eodStatus.Where(x => x.ValueDate == lastDate)?.FirstOrDefault();
|
|
|
|
var info = new SettlementReadyInfo
|
|
{
|
|
LastSettlementDate = lastDate.ToString("yyyy-MM-dd"),
|
|
CheckStatus = eodstatus?.CheckStatus ?? false
|
|
};
|
|
|
|
return JsonSuccess(info);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日终清算数据
|
|
/// </summary>
|
|
//[TypeFilter(typeof(ActionLogFilter))]
|
|
[HttpPost, Route("api/v1/settlement/info_all")]
|
|
public IActionResult SettlementInfoAll([FromBody] EodSettleInfoRequest req)
|
|
{
|
|
if (req is null)
|
|
{
|
|
return Ok(JsonError("处理请求失败:参数为null"));
|
|
}
|
|
|
|
var context = new EodSettleInfoQueryContext(CurUser);
|
|
|
|
var clientIdsOfInside = context.GetClientIdsOfInside();
|
|
|
|
var clientIdsOfNoInside = context.GetClientIds().Where(a => !clientIdsOfInside.Contains(a)).ToList();
|
|
|
|
//持仓记录
|
|
var positionResult = new EodTradePositionApiService(context).GetEodPositions(req, clientIdsOfInside);
|
|
|
|
//平仓记录
|
|
var CloseInfos = new EodCloseInfoQueryService(context).GetEodCloseInfoList(req.ValueDate, clientIdsOfInside);
|
|
|
|
//账户结算信息
|
|
var AccountInfos = ClientBalanceUtility.GetClientBanlances(
|
|
clientIdList: clientIdsOfNoInside,
|
|
startDate: DateTime.MinValue,
|
|
endDate: req.ValueDate,
|
|
IsGetOuterMarginGap: false,
|
|
IsClientBalanceGap: false,
|
|
ParentFlag: false,
|
|
clientDataSource: context);
|
|
|
|
//账户基础信息
|
|
var AccountBaseInfos = context.AsQueryable().Where(a => !clientIdsOfInside.Contains(a.id)).Select(n => new { n.id, n.ParentId, n.Name, n.Number, n.LicenseCode }).ToArray();
|
|
|
|
var SummaryInfo = new EodTradePositionApiService(context).GetClientSettleBalancesSumInfo(AccountInfos);
|
|
|
|
var result = new
|
|
{
|
|
positionResult.OptionPositions,
|
|
positionResult.SwapPositions,
|
|
positionResult.ForwardPositions,
|
|
CloseInfos,
|
|
AccountInfos,
|
|
AccountBaseInfos,
|
|
SummaryInfo
|
|
};
|
|
|
|
var serializeSettings = new JsonSerializerSettings
|
|
{
|
|
NullValueHandling = req.CompactResult ? NullValueHandling.Ignore : NullValueHandling.Include
|
|
};
|
|
|
|
if (serializeSettings.Converters == null)
|
|
{
|
|
serializeSettings.Converters = new List<JsonConverter>();
|
|
}
|
|
|
|
serializeSettings.Converters.Add(new DoubleJsonWriteConverter(2, 8));
|
|
|
|
var bakFolder = OtcAppContext.MapPath("/log/settlement_info_all");
|
|
|
|
Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
Directory.CreateDirectory(bakFolder);
|
|
var json = JsonHelper.Serialize(result);
|
|
System.IO.File.WriteAllText(Path.Combine(bakFolder, DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".json"), json);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogFactory.GetLogger("settlement_info_all_bak").Error(ex);
|
|
}
|
|
});
|
|
|
|
return new JsonResult(new ApiResponseModel { data = result }, serializeSettings);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日终清算--持仓列表
|
|
/// </summary>
|
|
[HttpPost, Route("api/v1/settlement/position_all")]
|
|
public ApiResponseModel SettlementPositionAll([FromBody] EodSettleInfoRequest req)
|
|
{
|
|
if (req is null)
|
|
{
|
|
return JsonError("处理请求失败:参数为null");
|
|
}
|
|
|
|
var context = new EodSettleInfoQueryContext(CurUser);
|
|
var result = new EodTradePositionApiService(context).GetEodPositions(req);
|
|
|
|
return JsonSuccess(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日终清算--平仓流水
|
|
/// </summary>
|
|
[HttpPost, Route("api/v1/settlement/closeInfo_all")]
|
|
public ApiResponseModel CloseInfoAll([FromBody] EodSettleInfoRequest req)
|
|
{
|
|
if (req is null)
|
|
{
|
|
return JsonError("处理请求失败:参数为null");
|
|
}
|
|
|
|
var context = new EodSettleInfoQueryContext(CurUser);
|
|
var closeResult = new EodCloseInfoQueryService(context).GetEodCloseInfoList(req.ValueDate);
|
|
|
|
return JsonSuccess(closeResult);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日终清算--平仓流水
|
|
/// </summary>
|
|
[HttpPost, Route("api/v1/settlement/accountInfo_all")]
|
|
public ApiResponseModel ClientAccountInfoAll([FromBody] EodSettleInfoRequest req)
|
|
{
|
|
if (req is null)
|
|
{
|
|
return JsonError("处理请求失败:参数为null");
|
|
}
|
|
|
|
var context = new EodSettleInfoQueryContext(CurUser);
|
|
|
|
var clientIds = context.GetClientIds();
|
|
|
|
var balanceResult = ClientBalanceUtility.GetClientBanlances(
|
|
clientIdList: clientIds,
|
|
startDate: System.DateTime.MinValue,
|
|
endDate: req.ValueDate,
|
|
IsGetOuterMarginGap: false,
|
|
IsClientBalanceGap: false,
|
|
ParentFlag: false,
|
|
clientDataSource: context);
|
|
|
|
return JsonSuccess(balanceResult);
|
|
}
|
|
}
|
|
}
|