using YLErp.Modules.ClientModule;
using YLErp.Modules.SubAppModule.ClientApp;
using YLErp.Modules.TradeDalModule;
namespace YLWebAPI.ApiModule.ClientApi
{
///
/// 专用于客户端的API列表(路径样式:api/v1/client/*)
///
[ClientAuth]
public class ClientApiController : BaseApiController
{
[HttpPost, Route("api/v1/client/test")]
public ApiResponseModel Test([FromBody] ClientChangePasswordRequest reqModel)
{
throw new System.Exception("测试报错");
}
[HttpPost, Route("api/v1/client/changeClientPassword")]
public ApiResponseModel ChangeClientPassword([FromBody] ClientChangePasswordRequest reqModel)
{
new ClientUserPasswordService(CurUser).ChangePassword(reqModel);
return JsonSuccess("成功", "成功");
}
///
/// 结算报告:获取客户财务状况
///
[HttpPost, Route("api/v1/client/clientLatestBalance")]
public IActionResult ClientLatestBalance([FromBody] ClientLatestBalanceRequestModel reqModel)
{
if (!string.IsNullOrWhiteSpace(reqModel.ClientName))
{
var ids = new ClientDataService(CurUser).GetClientIdByName(reqModel.ClientName);
if (ids.Length == 0)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'没有找到客户信息"));
}
if (ids.Length > 1)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'找到多个客户信息,不支持此种请求"));
}
reqModel.ClientId = ids[0];
}
ClientSettleBalance data = null;
if (reqModel.ClientId > 0)
{
data = ClientAssetDataService.GetClientLatestBalance(
reqModel.ValueDateFrom,
reqModel.ValueDateTo,
reqModel.ClientId);
}
return Ok(data);
}
///
/// 结算报告:获取客户持仓信息
///
[HttpPost, Route("api/v1/client/clientTradePosition")]
public IActionResult ClientTradePosition([FromBody] ClientTradePositionRequestModel reqModel)
{
SearchListResult data = null;
if (reqModel.ClientId > 0)
{
data = new ClientPositionQueryService(CurUser).GetClientPositionAPI(
reqModel.ValueDate,
reqModel.ClientId,
reqModel.Page,
reqModel.PageRowCount);
}
return Ok(data);
}
///
/// 结算报告:历史交易
///
[HttpPost, Route("api/v1/client/clientTradeHistory")]
public IActionResult ClientTradeHistory([FromBody] ClientLatestBalancePagedRequestModel reqModel)
{
if (!string.IsNullOrWhiteSpace(reqModel.ClientName))
{
var ids = new ClientDataService(CurUser).GetClientIdByName(reqModel.ClientName);
if (ids.Length == 0)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'没有找到客户信息"));
}
if (ids.Length > 1)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'找到多个客户信息,不支持此种请求"));
}
reqModel.ClientId = ids[0];
}
SearchListResult data = null;
if (reqModel.ClientId > 0)
{
data = ClientAssetDataService.GetClientTradeHistory(
reqModel.ValueDateFrom,
reqModel.ValueDateTo,
reqModel.ClientId,
reqModel.Page ?? 0,
reqModel.PageRowCount ?? 0);
}
return Ok(data);
}
///
/// 结算报告:查看交易详情
///
[HttpPost, Route("api/v1/client/tradeDetails")]
public IActionResult TradeDetails([FromBody] ClientTradeDetailRequestModel reqModel)
{
TradeWithSettlement data = null;
if (!string.IsNullOrWhiteSpace(reqModel.EncryptedId))
{
var tradeId = DataProtectHelper.DecryptInt(reqModel.EncryptedId);
var trade = YLErp.Modules.DbContextFactory.GetYLDbContext().trade.Find(tradeId);
//客户角度看交易,买卖方向反过来
if (trade != null)
{
data = new TradeDalService(CurUser).GetTradeWithSettlementTradeCash(trade);
if (trade.BuySell == "买入")
{
data.Trade.BuySell = "卖出";
}
else if (trade.BuySell == "卖出")
{
data.Trade.BuySell = "买入";
}
if (data.MaturityTradeCash != null)
{
data.MaturityTradeCash.SingleWinPrice = -data.MaturityTradeCash.SingleWinPrice;
data.MaturityTradeCash.WinLoss = MinusNumberString(data.MaturityTradeCash.WinLoss);
}
if (data.UnwindTradeCashList != null)
{
data.UnwindTradeCashList.ForEach(tradeCash =>
{
tradeCash.WinLoss = MinusNumberString(tradeCash.WinLoss);
});
}
}
}
return Ok(data);
}
private static string MinusNumberString(string numberStr)
{
double number;
if (double.TryParse(numberStr, out number))
{
return (-number).ToString();
}
else
{
return "";
}
}
///
/// 结算报告:资金记录
///
[HttpPost, Route("api/v1/client/clientCashRecords")]
public IActionResult ClientCashRecords([FromBody] ClientLatestBalancePagedRequestModel reqModel)
{
if (!string.IsNullOrWhiteSpace(reqModel.ClientName))
{
var ids = new ClientDataService(CurUser).GetClientIdByName(reqModel.ClientName);
if (ids.Length == 0)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'没有找到客户信息"));
}
if (ids.Length > 1)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'找到多个客户信息,不支持此种请求"));
}
reqModel.ClientId = ids[0];
}
SearchListResult data = null;
if (reqModel.ClientId > 0)
{
data = ClientAssetDataService.GetClientCashRecords(
reqModel.ValueDateFrom,
reqModel.ValueDateTo,
reqModel.ClientId,
reqModel.Page ?? 0,
reqModel.PageRowCount ?? 0);
}
return Ok(data);
}
///
/// 结算报告:客户是否有过质押记录
///
[HttpPost, Route("api/v1/client/clientHasCollateral")]
public ApiResponseModel ClientHasCollateral([FromBody] ClientLatestBalanceRequestModel reqModel)
{
if (!string.IsNullOrWhiteSpace(reqModel.ClientName))
{
var ids = new ClientDataService(CurUser).GetClientIdByName(reqModel.ClientName);
if (ids.Length == 0)
{
return JsonError($"根据客户名称'{reqModel.ClientName}'没有找到客户信息");
}
if (ids.Length > 1)
{
return JsonError($"根据客户名称'{reqModel.ClientName}'找到多个客户信息,不支持此种请求");
}
reqModel.ClientId = ids[0];
}
var hasCollateral = false;
if (reqModel.ClientId > 0)
{
using (var db = YLErp.Modules.DbContextFactory.GetYLDbContext())
{
hasCollateral = db.clientcashincashout_product.Count(x => x.ClientId == reqModel.ClientId) > 0;
}
}
//必须包一层
return JsonSuccess(hasCollateral);
}
///
/// 结算报告:质押记录
///
[HttpPost, Route("api/v1/client/clientCollateral")]
public IActionResult ClientCollateral([FromBody] ClientLatestBalanceRequestModel reqModel)
{
if (!string.IsNullOrWhiteSpace(reqModel.ClientName))
{
var ids = new ClientDataService(CurUser).GetClientIdByName(reqModel.ClientName);
if (ids.Length == 0)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'没有找到客户信息"));
}
if (ids.Length > 1)
{
return Ok(JsonError($"根据客户名称'{reqModel.ClientName}'找到多个客户信息,不支持此种请求"));
}
reqModel.ClientId = ids[0];
}
SearchListResult data = null;
if (reqModel.ClientId > 0)
{
var req = new clientcashincashout_productReq()
{
ValueDate = reqModel.ValueDateTo,
ClientId = reqModel.ClientId
};
data = new clientcashincashout_productBLL().SearchListForMarketReport(req);
}
return Ok(data);
}
///
/// 返回客户端声明
///
[HttpGet, Route("api/v1/client/clientDesc")]
public ApiResponseModel ClientDesc()
{
using (var db = YLErp.Modules.DbContextFactory.GetYLDbContext())
{
var description = db.valuedate.FirstOrDefault(v => v.State == valuedate.当前使用).ClientDesc;
return JsonSuccess(description);//必须包一层
}
}
}
}