Files
zszq-trs/YLErpDAL/CustomizedBizLogic/BizLogicZheShang.cs
T

93 lines
3.9 KiB
C#

using TinyPinyin;
using YieldChain.Helpers;
using YLErp.BLL;
using YLErp.DBModels;
using YLErp.Modules;
namespace YLErp.CustomizedBizLogic
{
public class BizLogicZheShang : BizLogicDefault
{
/// <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 clientNumber = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId)?.Number.TrimToNull();
//合并起来作为获取递增序号的取值条件
var leftPart = string.Empty;
var fullSize = 0; leftPart = $"GLMS-IS-{reqModel.trade.TradeDate:yyyyMMdd}";
fullSize = leftPart.Length + 4;
//获取数据库该用户最大的交易编号记录
var tradeNumber = db.trade.Where(x => x.TradeNumber.StartsWith(leftPart) && x.TradeNumber.Length == fullSize && x.ValidState != ConsGlobal.InValid)
.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);
return getTradeNumber(newNumber, leftPart, db);
}
private string getTradeNumber(int newNumber, string leftPart, YLContext db)
{
if (newNumber < 1e4)
{
var childTradeNumberPart = leftPart + newNumber.ToString("D4") + "-";
if (db.trade.Any(x => EF.Functions.Like(x.TradeNumber, $"{childTradeNumberPart}%") && x.ValidState != "InValid"))
{
return getTradeNumber(newNumber + 1, leftPart, db);
}
else
{
return leftPart + newNumber.ToString("D4");
}
}
else
{
throw new Exception("该客户存在最大交易编号" + (newNumber - 1) + ",超出了限制规则9999,生成交易编号失败");
}
}
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
if (string.IsNullOrWhiteSpace(clientObj.Number))
{
var firstPY = PingYinHelper.GetFirstPinYin_Enhance(clientObj.Name);
var year = DateTime.Now.ToString("yy");
var result = "";
lock (_clientCodeLock)
{
var existingClientCodes = clientDbQuery.Where(x => x.Number.StartsWith(year)).Select(x => x.Number).ToList();
var number = existingClientCodes.Count();
do
{
number++;
result = year + number.ToString("000");
} while (existingClientCodes.Any(O => O.StartsWith(result)));
clientObj.Number = result + firstPY;
}
}
}
}
}