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

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