95 lines
4.0 KiB
C#
95 lines
4.0 KiB
C#
using System.Text.RegularExpressions;
|
|
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
public class BizLogicGldh : BizLogicDefault
|
|
{
|
|
/// <summary>
|
|
/// 在交易确认前生成交易编号
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
|
|
{
|
|
if (reqModel is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(reqModel));
|
|
}
|
|
|
|
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
if (!reqModel.valueDate.HasValue)
|
|
{
|
|
reqModel.valueDate = valuedateBLL.ValueDate;
|
|
}
|
|
if (string.IsNullOrEmpty(client.Code))
|
|
{
|
|
throw new Exception("该客户客户代码为空,生成交易编号失败");
|
|
}
|
|
string preTag = $"{client.Code}-{reqModel.valueDate.Value.ToString("yyMMdd")}";
|
|
|
|
//获取数据库该用户当天最大的交易编号记录
|
|
var tradeNumber = db.trade.Where(x => x.ClientId == reqModel.clientId && reqModel.valueDate.Value == x.TradeDate && x.TradeNumber.StartsWith(preTag))
|
|
.OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
|
|
if (reqModel.importTrades != null && reqModel.importTrades.Count > 0)
|
|
{
|
|
//获取导入交易中该客户当天最大的交易编号记录
|
|
var importTradeNumber = reqModel.importTrades.Where(x => x.ClientId == reqModel.clientId && reqModel.valueDate.Value == x.TradeDate && x.TradeNumber.Contains(preTag))
|
|
.OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
tradeNumber = tradeNumber.CompareTo(importTradeNumber) > 0 ? tradeNumber : importTradeNumber;
|
|
}
|
|
|
|
//获取总的该用户当天最大的交易编号记录
|
|
int newNumber = 1;
|
|
|
|
if (!string.IsNullOrWhiteSpace(tradeNumber) && tradeNumber.Length > preTag.Length)
|
|
{
|
|
var tradeNumStr = tradeNumber.Substring(preTag.Length);
|
|
if (!string.IsNullOrEmpty(tradeNumStr) && tradeNumStr.IndexOf("-") > 0)
|
|
{
|
|
tradeNumStr = tradeNumStr.Substring(0, tradeNumStr.IndexOf("-"));
|
|
}
|
|
if (!string.IsNullOrEmpty(tradeNumStr))
|
|
{
|
|
if (!int.TryParse(tradeNumStr, out newNumber))
|
|
{
|
|
throw new ServiceFaultException("生成交易编号出错,未能从已存在的交易编号中解析出最大序号,此交易编号为:" + tradeNumber);
|
|
}
|
|
newNumber++;
|
|
}
|
|
}
|
|
|
|
if (newNumber <= 999)
|
|
{
|
|
return preTag + newNumber.ToString("00");
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("该客户存在最大交易编号" + (newNumber - 1) + ",超出了限制规则999,生成交易编号失败");
|
|
}
|
|
}
|
|
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(clientObj.Number))
|
|
{
|
|
lock (_clientCodeLock)
|
|
{
|
|
var existClient = clientDbQuery.Where(x => x.Number.Length == 6).OrderByDescending(x => x.Number).FirstOrDefault();
|
|
int.TryParse(existClient?.Number, out var nextNum);
|
|
nextNum += 1;
|
|
if (nextNum < 1000000)
|
|
{
|
|
clientObj.Number = nextNum.ToString("D6");
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("系统中已存在最大客户编号999999,生成客户编号失败");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|