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

104 lines
3.9 KiB
C#

using YLErp.BLL;
using YLErp.Modules;
namespace YLErp.CustomizedBizLogic
{
public class BizLogicHuaXi : BizLogicDefault
{
/// <summary>
/// 生成客户编号 -- 华西还要生成 主协议/补充协议/履保协议
/// </summary>
/// <param name="initialCode">客户创建时的初始编号,如果没有传null</param>
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
if (string.IsNullOrWhiteSpace(clientObj.Number))
{
var result = "CW";
lock (_clientCodeLock)
{
result += DateTime.Now.Year.ToString();
var existingClientCodes = clientDbQuery.Where(x => x.Number.Contains(result)).Select(x => x.Number).ToList();
var maxNumber = 0;
if (existingClientCodes.Count > 0)
{ maxNumber = existingClientCodes.Max(x => ParseNumber(x.Substring(6))); }
var nextNum = maxNumber + 1;
if (nextNum < 10000)
{
result += nextNum.ToString("D4");
}
else
{
//如果大于9999,将生成CW201810000等字符串,需求是说不会大于10000的
result += nextNum.ToString();
}
clientObj.Number = result;
}
}
}
/// <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);
const string SACO = "SACO-"; //期权
const string SACT = "SACT-"; //互换
const string company = "华西证券-";
string year = reqModel.trade.TradeDate?.ToString("yyyy") + "-";
//合并起来作为获取递增序号的取值条件
var leftPart = SACO + company + year;
if (reqModel.trade.TradeType == "收益互换")
{
leftPart = SACT + company + year;
}
var XXleftPart = "XX" + leftPart;
//获取数据库该用户最大的交易编号记录
var tradeNumber = db.trade.Where(x => x.TradeNumber.StartsWith(leftPart) || x.TradeNumber.StartsWith(XXleftPart)).Select(x => x.TradeNumber.Replace(leftPart, "").Replace("XX", "")).ToList();
if (reqModel.importTrades != null && reqModel.importTrades.Any())
{
//获取导入交易中该客户最大的交易编号记录
var importTradeNumber = reqModel.importTrades.Where(x => x.TradeNumber.StartsWith(leftPart)).Select(x => x.TradeNumber.Replace(leftPart, "").Replace("XX", "")).ToList();
tradeNumber.AddRange(importTradeNumber);
}
var numberStrings = tradeNumber.Where(x => int.TryParse(x, out var num2));
var number = (numberStrings.LongCount() > 0 ? numberStrings.Max(x => int.TryParse(x, out int a) ? a : 0) : 0) + 1;
if (number < 1e3)
{
return leftPart + number.ToString("D3");
}
else
{
return leftPart + number.ToString();
}
}
private int ParseNumber(string clientNumber)
{
int.TryParse(clientNumber, out var number);
return number;
}
}
}