95 lines
3.4 KiB
C#
95 lines
3.4 KiB
C#
using YLErp.BLL;
|
|
using YLErp.Helpers;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
class BizLogicXingZheng : BizLogicDefault
|
|
{
|
|
/// <summary>
|
|
/// 生成交易编号
|
|
/// </summary>
|
|
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
|
|
{
|
|
if (reqModel is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(reqModel));
|
|
}
|
|
if (!reqModel.trade.TradeDate.HasValue)
|
|
{
|
|
throw new BizLogicException("交易日期不存在");
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; }
|
|
|
|
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
if (client == null)
|
|
{
|
|
throw new BizLogicException("客户信息不存在");
|
|
}
|
|
if (client.Number.IsNullOrWhiteSpace())
|
|
{
|
|
throw new BizLogicException("客户编号不存在");
|
|
}
|
|
string codePrefix;
|
|
|
|
//当等于远期时,判断是否累计转的,如果是远期编号规则 -> 用累计的交易编号 + 当前累计转的远期数量
|
|
if (reqModel.trade.TradeType == "远期" && reqModel.trade.MetaDic.TryGetValue("累计期权交易编号", out var mainNumber) && !string.IsNullOrWhiteSpace(mainNumber))
|
|
{
|
|
codePrefix = mainNumber + "-";
|
|
}
|
|
else
|
|
{
|
|
codePrefix = $"{reqModel.trade.TradeDate.Value:yyMMdd}{client.Number}";
|
|
}
|
|
|
|
var tradeNumbers = new List<string>();
|
|
|
|
tradeNumbers = db.trade.Where(x => x.TradeNumber.StartsWith(codePrefix) && x.ParentTradeId == 0).Select(x => x.TradeNumber).ToList();
|
|
|
|
//获取导入
|
|
if (reqModel.importTrades != null)
|
|
{
|
|
tradeNumbers.AddRange(reqModel.importTrades.Select(O => O.TradeNumber));
|
|
}
|
|
|
|
var number = tradeNumbers.Count;
|
|
var code = "";
|
|
do
|
|
{
|
|
number++;
|
|
code = $"{codePrefix}{number:00}";
|
|
if (!tradeNumbers.Contains(code))
|
|
{ break; }
|
|
} while (true);
|
|
return code;
|
|
}
|
|
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
|
|
lock (_clientCodeLock)
|
|
{
|
|
var date = clientObj.ProtocolSignDate;
|
|
if (!date.HasValue)
|
|
{
|
|
throw new ServiceException("生成客户编号失败,因尚未填写商品类签署日期,客户名称:" + clientObj.Name);
|
|
}
|
|
var code = "";
|
|
|
|
var existingClientCodes = clientDbQuery.Where(x => x.Number != null && x.Number != "").Select(x => x.Number).ToList();
|
|
var number = existingClientCodes.Count;
|
|
do
|
|
{
|
|
number++;
|
|
code = number.ToString("0000");
|
|
if (!existingClientCodes.Contains(code))
|
|
{ break; }
|
|
} while (true);
|
|
|
|
clientObj.Number = code;
|
|
}
|
|
}
|
|
}
|
|
}
|