Files
zszq-trs/YLErpDAL/CustomizedBizLogic/BizLogicZJ.cs
T
2024-05-09 14:06:26 +08:00

118 lines
3.8 KiB
C#

using YLErp.BLL;
using YLErp.Modules;
namespace YLErp.CustomizedBizLogic
{
public class BizLogicZJ : BizLogicDefault
{
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
{
if (reqModel is null)
{
throw new ArgumentNullException(nameof(reqModel));
}
if (reqModel.trade.TradeDate == null)
{
throw new Exception("生成合同编号失败,请先确认该交易成交日期!");
}
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
if (client == null)
{
throw new Exception("未找到客户!");
}
var code = "";
var trade = reqModel.trade;
var prefix = "";
var um = DataCacheProvider.GetUnderlyingDataSource().GetData(trade.UnderlyingCode);
var IsBuy = false;
if (trade.TradeType == "收益互换")
{
var swapTrade = trade.trade_swap;
if (swapTrade == null)
{
swapTrade = db.trade_swap.AsNoTracking().FirstOrDefault(n => n.TradeId == trade.id);
}
if (swapTrade != null && swapTrade.PayLongShort == "多头")
{
IsBuy = true;
}
}
else
{
if (trade.BuySell == "买入")
{
IsBuy = true;
}
}
prefix += trade.TradeDate?.ToString("yyyyMMdd") + "_" + client.Number + "_" + um.UnderlyingCode + "_";
if (IsBuy)
{
prefix += "B_";
}
else
{
prefix += "S_";
}
var tradeNumbers =
db.trade
.Where(O =>
O.TradeNumber.StartsWith(prefix)
&& O.ValidState != "InValid").Select(O => O.TradeNumber).OrderByDescending(O => O);
var tradeNumber = tradeNumbers.FirstOrDefault();
var tradeCount = 0;
if (string.IsNullOrWhiteSpace(tradeNumber) || !int.TryParse(tradeNumber.Substring(prefix.Length), out tradeCount))
{
tradeCount = 0;
}
do
{
code = $"{prefix}{tradeCount}";
tradeCount++;
} while (tradeNumbers.Contains(code));
return code;
}
public string GenerateFlowNumber(trade_swap_flow reqModel, YLContext db)
{
if (reqModel is null)
{
throw new ArgumentNullException(nameof(reqModel));
}
if (reqModel.TradeDate == null)
{
throw new Exception("生成合同编号失败,请先确认该流水成交日期!");
}
var code = "";
var prefix = "";
var um = DataCacheProvider.GetUnderlyingDataSource().GetData(reqModel.UnderlyingCode);
prefix += reqModel.TradeDate?.ToString("yyyyMMdd") + "_" + reqModel.ClientNumber + "_" + um.UnderlyingCode + "_" + reqModel.BuySell + "_";
var numbers =
db.trade_swap_flow
.Where(O => O.Number.StartsWith(prefix)).Select(O => O.Number).OrderByDescending(O => O);
var flowNumber = numbers.FirstOrDefault();
var flowCount = 0;
if (string.IsNullOrWhiteSpace(flowNumber) || !int.TryParse(flowNumber.Substring(prefix.Length), out flowCount))
{
flowCount = 0;
}
do
{
code = $"{prefix}{flowCount}";
flowCount++;
} while (numbers.Contains(code));
return code;
}
}
}