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 { /// /// 清算API /// [ManagerAuth] public class SettlementController : BaseApiController { /// /// 日终结算信息 /// [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); } /// /// 日终清算数据 /// //[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(); } 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); } /// /// 日终清算--持仓列表 /// [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); } /// /// 日终清算--平仓流水 /// [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); } /// /// 日终清算--平仓流水 /// [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); } } }