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

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;
}
}
}
}