98 lines
3.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|