97 lines
3.2 KiB
C#
97 lines
3.2 KiB
C#
using YLErp.BLL;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
/// <summary>
|
|
/// 瑞达
|
|
/// </summary>
|
|
class BizLogicRD : 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 code = "";
|
|
|
|
var prefix = "OTC-";
|
|
|
|
//远期
|
|
if (reqModel.trade.TradeType == "远期")
|
|
{
|
|
//掉期
|
|
if (reqModel.trade.StructureType == "掉期")
|
|
{
|
|
prefix += "SW-";
|
|
}
|
|
else
|
|
{
|
|
prefix += "FW-";
|
|
}
|
|
}
|
|
prefix += reqModel.trade.TradeDate?.ToString("yyyyMM");
|
|
|
|
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
|
|
{
|
|
tradeCount++;
|
|
code = $"{prefix}{tradeCount:D3}";
|
|
} while (tradeNumbers.Contains(code));
|
|
return code;
|
|
}
|
|
|
|
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
|
|
if (string.IsNullOrWhiteSpace(clientObj.Code))
|
|
{
|
|
throw new Exception("生成客户编号失败,请先添加客户代码");
|
|
}
|
|
lock (_clientCodeLock)
|
|
{
|
|
var prefix = "RDXK-" + clientObj.ProcessOptDate?.ToString("yyyyMMdd");
|
|
var last = $"-{clientObj.Code}";
|
|
|
|
var existingClientCodes = clientDbQuery.Where(o => o.Number != null && o.Number.StartsWith(prefix))
|
|
.Select(x => x.Number).OrderByDescending(O => O);
|
|
var existingClientCode = existingClientCodes.FirstOrDefault();
|
|
|
|
string code;
|
|
var number = 0;
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(existingClientCode))
|
|
{
|
|
var temp = existingClientCode.Substring(prefix.Length);
|
|
temp = temp.Substring(0, temp.IndexOf('-'));
|
|
int.TryParse(temp, out number);
|
|
}
|
|
do
|
|
{
|
|
number++;
|
|
code = $"{prefix}{number:D2}{last}";
|
|
} while (existingClientCodes.Contains(code));
|
|
|
|
}
|
|
clientObj.Number = code;
|
|
}
|
|
}
|
|
}
|
|
}
|