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

98 lines
3.7 KiB
C#

using System.Text.RegularExpressions;
using YLErp.BLL;
namespace YLErp.CustomizedBizLogic
{
/// <summary>
/// 上期资本
/// </summary>
class BizLogicSQ : BizLogicDefault
{
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)
{
string code = "";
var clientObj = GetClient(reqModel.clientId);
if (clientObj == null)
{
throw new Exception("未找到客户信息!");
}
if (!clientObj.ProtocolSignDate.HasValue)
{
throw new Exception("生成合同编号失败,请先添加客户商品类协议签署日期!");
}
if (reqModel.trade.TradeDate == null)
{
throw new Exception("生成合同编号失败,请先确认该交易成交日期!");
}
string prefix = $"{clientObj.Number}-JY-{reqModel.trade.TradeDate?.ToString("yyyyMMdd")}";
var tradeNumbers =
db.trade
.Where(O =>
O.TradeNumber.StartsWith(prefix)
&& O.ValidState != "InValid").Select(O => O.TradeNumber).OrderByDescending(O => O);
var tradeNumber = tradeNumbers.FirstOrDefault();
int tradeCount = 0;
if (string.IsNullOrWhiteSpace(tradeNumber) || !int.TryParse(tradeNumber.Substring(prefix.Length), out tradeCount))
{
tradeCount = 0;
}
do
{
tradeCount++;
code = $"{prefix}{tradeCount:00}";
} while (tradeNumbers.Contains(code));
return code;
}
}
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
if (!clientObj.ProtocolSignDate.HasValue)
{
throw new Exception("生成客户编号失败,请先添加客户商品类协议签署日期!");
}
lock (_clientCodeLock)
{
DateTime date = DateTime.Now;
string code = "";
string codePrefix = "SQCW[" + clientObj.ProtocolSignDate?.ToString("yyyyMMdd") + "]";// "OTC";
var existingClientCodes = clientDbQuery.Where(o => o.Number != null && o.Number.StartsWith(codePrefix))
.Select(x => x.Number).OrderByDescending(O => O);
var existingClientCode = existingClientCodes.FirstOrDefault();
int number = 0;
if (!string.IsNullOrWhiteSpace(existingClientCode))
{
Match maxCode = null;
if ((maxCode = Regex.Match(existingClientCode, @"\d+$")).Success)
{
number = int.Parse(maxCode.Value);
}
}
do
{
number++;
code = codePrefix + number.ToString("0000");
if (!existingClientCodes.Contains(code))
{ break; }
} while (true);
clientObj.Number = code;
}
}
}
}