Files
2024-05-09 14:06:26 +08:00

93 lines
3.3 KiB
C#

using YLErp.BLL;
using YLErp.Modules;
namespace YLErp.CustomizedBizLogic
{
/// <summary>
/// 伴兴实业
/// </summary>
public class BizLogicBX : BizLogicDefault
{
/// <summary>
/// 生成交易编号
/// </summary>
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
{
if (reqModel is null)
{
throw new ArgumentNullException(nameof(reqModel));
}
if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; }
lock (_clientCodeLock)
{
var clientPY = "";
var date = reqModel.trade.TradeDate;
var tradeNumbers = new List<string>();
tradeNumbers = db.trade.Where(x => x.TradeDate.Value == date && x.ClientId == reqModel.clientId && x.ParentTradeId == 0).Select(x => x.TradeNumber).ToList();
//获取导入
if (reqModel.importTrades != null)
{
tradeNumbers.AddRange(reqModel.importTrades.Select(O => O.TradeNumber));
}
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
if (client == null)
{
throw new Exception("请先添加交易对手方");
}
if (string.IsNullOrWhiteSpace(client.Code))
{
throw new Exception("生成交易编号失败,请先添加交易对手方(客户)代码");
}
clientPY = client.Code;
var codePrefix = $"SHBX-{clientPY}-{date?.ToString("yyMMdd")}";
var number = tradeNumbers.Count;
var code = "";
do
{
number++;
code = number.ToString();
if (number <= 9)
{
code = code.PadLeft(2, '0');
}
code = codePrefix + code;
if (!tradeNumbers.Contains(code))
{ break; }
} while (true);
return code;
}
}
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
lock (_clientCodeLock)
{
var date = clientObj.ProtocolSignDate;
if (!date.HasValue)
{
throw new ServiceException("生成客户编号失败,因尚未填写商品类签署日期,客户名称:" + clientObj.Name);
}
var code = "";
var codePrefix = $"SHBX-{date.Value.Year}";
var existingClientCodes = clientDbQuery.Where(x => x.Number.StartsWith(codePrefix)).Select(x => x.Number).ToList();
var number = existingClientCodes.Count;
do
{
number++;
code = codePrefix + number.ToString("0000");
if (!existingClientCodes.Contains(code))
{ break; }
} while (true);
clientObj.Number = code;
}
}
}
}