105 lines
4.5 KiB
C#
105 lines
4.5 KiB
C#
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
public class BizLogicHuaAn : BizLogicDefault
|
|
{
|
|
/// <summary>
|
|
/// 生成客户编号
|
|
/// </summary>
|
|
/// <param name="initialCode">客户创建时的初始编号,如果没有传null</param>
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
const string HAZB = "HAZB";
|
|
const string CW = "CW";
|
|
|
|
if (string.IsNullOrWhiteSpace(clientObj.Number))
|
|
{
|
|
lock (_clientCodeLock)
|
|
{
|
|
int date = clientObj.ProtocolSignDate?.Year ?? 0;
|
|
string leftPart = "";
|
|
if (2017 <= date && date <= 2018)
|
|
{
|
|
leftPart = HAZB + "-" + CW + clientObj.ProtocolSignDate?.ToString("yyyy");
|
|
}
|
|
else if (2019 <= date && date <= 2020)
|
|
{
|
|
leftPart = HAZB + clientObj.ProtocolSignDate?.ToString("yy") + CW + (string.IsNullOrEmpty(clientObj.RiskServiceDegreeName) ? "R0" : clientObj.RiskServiceDegreeName);
|
|
}
|
|
else if (date >= 2021)
|
|
{
|
|
leftPart = HAZB + clientObj.ProtocolSignDate?.ToString("yy") + CW;
|
|
}
|
|
var leftPartSize = leftPart.Length;
|
|
var existingNumbers = clientDbQuery.Where(x => x.Number.StartsWith(leftPart)).Select(x => x.Number).ToArray();
|
|
var maxNumber = 0;
|
|
if (existingNumbers.Any())
|
|
{
|
|
maxNumber = existingNumbers.Max(x => int.TryParse(x?.Substring(leftPartSize), out var number) ? number : 0);
|
|
}
|
|
clientObj.Number = leftPart + (maxNumber + 1).ToString().PadLeft(3, '0');
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在交易确认前生成交易编号
|
|
/// </summary>
|
|
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
|
|
{
|
|
if (reqModel is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(reqModel));
|
|
}
|
|
|
|
//对于对冲交易、场内交易等没有设置客户的
|
|
if (reqModel.clientId == 0)
|
|
{
|
|
return DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
|
}
|
|
|
|
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
var clientNumber = client?.Number.TrimToNull();
|
|
int date = client.ProtocolSignDate?.Year ?? 0;
|
|
|
|
//合并起来作为获取递增序号的取值条件
|
|
var leftPart = clientNumber + "-";
|
|
var fullSize = leftPart.Length + 3;
|
|
if (2017 <= date && date <= 2018)
|
|
{
|
|
fullSize = leftPart.Length + 2;
|
|
}
|
|
|
|
//获取数据库该用户最大的交易编号记录
|
|
var tradeNumber = db.trade.Where(x => x.TradeNumber.StartsWith(leftPart) && x.TradeNumber.Length == fullSize)
|
|
.OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
if (reqModel.importTrades != null && reqModel.importTrades.Any())
|
|
{
|
|
//获取导入交易中该客户最大的交易编号记录
|
|
var importTradeNumber = reqModel.importTrades.Where(x => x.TradeNumber.StartsWith(leftPart) && x.TradeNumber.Length == fullSize)
|
|
.OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
tradeNumber = tradeNumber.CompareTo(importTradeNumber) > 0 ? tradeNumber : importTradeNumber;
|
|
}
|
|
|
|
//获取总的该用户最大的交易编号记录
|
|
int newNumber = string.IsNullOrWhiteSpace(tradeNumber) ? 1 : (int.Parse(tradeNumber.Substring(leftPart.Length)) + 1);
|
|
|
|
if (newNumber < 1e3)
|
|
{
|
|
if (2017 <= date && date <= 2018)
|
|
{
|
|
return leftPart + newNumber.ToString("D2");
|
|
}
|
|
return leftPart + newNumber.ToString("D3");
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("该客户存在最大交易编号" + (newNumber - 1) + ",超出了限制规则999,生成交易编号失败");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|