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

67 lines
2.4 KiB
C#

using YLErp.BLL;
namespace YLErp.CustomizedBizLogic
{
public class BizLogicFD : BizLogicDefault
{
/// <summary>
/// 生成客户编号
/// 生成规则:例如 SAC-0001 , SAC-为固定字符,最后四位是序列编号,从0001开始,每增加一个客户自动加1,序号最大值9999
/// </summary>
/// <param name="initialCode">客户创建时的初始编号,如果没有传null</param>
/// <param name="db"></param>
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
var prefix = "SAC-";
if (string.IsNullOrWhiteSpace(clientObj.Number) || !clientObj.Number.StartsWith(prefix))
{
lock (_clientCodeLock)
{
string result;
var existingClientCodes = clientDbQuery.Where(x => x.Number.Contains(prefix)).Select(x => x.Number).ToList();
if (existingClientCodes.Count == 0)
{
result = "0001";
}
else
{
var maxNumber = existingClientCodes.Max(x => parseNumber(x.Substring(4)));
var nextNum = maxNumber + 1;
if (nextNum < 10000)
{
result = nextNum.ToString("D4");
}
else
{
//如果大于9999,将生成SAC-10000等字符串,需求是说不会大于10000的
result = nextNum.ToString();
}
}
clientObj.Number = prefix + result;
}
}
}
/// <summary>
/// 在交易确认前生成交易编号
/// </summary>
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
{
if (reqModel is null)
{
throw new ArgumentNullException(nameof(reqModel));
}
var maxNumber = reqModel.trade.TradeDate?.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss");
return maxNumber;
}
private int parseNumber(string clientNumber)
{
int.TryParse(clientNumber, out var number);
return number;
}
}
}