91 lines
3.7 KiB
C#
91 lines
3.7 KiB
C#
using System.Text.RegularExpressions;
|
|
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
class BizLogicHongYuan : 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)
|
|
{
|
|
Client clientObj = null;
|
|
string code = "";
|
|
|
|
clientObj = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
|
|
if (clientObj == null)
|
|
{
|
|
throw new Exception("未找到客户信息!");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(clientObj.Code))
|
|
{
|
|
throw new Exception("生成合同编号失败,请先添加客户代码!");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(clientObj.Abbreviation))
|
|
{
|
|
throw new Exception("生成合同编号失败,请先添加客户简称!");
|
|
}
|
|
if (!clientObj.ProtocolSignDate.HasValue)
|
|
{
|
|
throw new Exception("生成合同编号失败,请先添加客户商品类协议签署日期!");
|
|
}
|
|
string prefix = $"HL-{clientObj.Code}-{clientObj.ProtocolSignDate?.ToString("yyyy")}-{clientObj.Abbreviation}-SAC-01-1-TC";
|
|
|
|
var tradeNumbers =
|
|
db.trade
|
|
.Where(O =>
|
|
O.TradeNumber.StartsWith(prefix)
|
|
&& O.ValidState != "InValid").Select(O => O.TradeNumber).ToArray();
|
|
int tradeCount = tradeNumbers.Length;
|
|
do
|
|
{
|
|
tradeCount++;
|
|
code = $"{prefix}{tradeCount.ToString("000")}";
|
|
} while (tradeNumbers.Contains(code));
|
|
return code;
|
|
}
|
|
}
|
|
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
|
|
lock (_clientCodeLock)
|
|
{
|
|
DateTime date = DateTime.Now;
|
|
string code = "";
|
|
string codePrefix = "";// "OTC";
|
|
//var existingClientCodes = clientDbQuery.Where(o => o.Number != null/* && o.Number.StartsWith(codePrefix)*/).Select(x => x.Number).OrderByDescending(O => new { O.Length, O }).ToList();
|
|
var existingClientCodes = clientDbQuery.Where(o => !string.IsNullOrEmpty(o.Number)).Select(x => x.Number).ToList();
|
|
long number = existingClientCodes.Where(p => Regex.Match(p, @"^\d+$").Success).Select(p => long.Parse(Regex.Match(p, @"^\d+$").Value)).OrderByDescending(p=>p).FirstOrDefault();
|
|
//int number = 0;
|
|
//Match maxCode = null;
|
|
//for (int i = 0; i < existingClientCodes.Count; i++)
|
|
//{
|
|
// if ((maxCode = Regex.Match(existingClientCodes[i], @"^\d+$")).Success)
|
|
// {
|
|
// number = int.Parse(maxCode.Value);
|
|
// break;
|
|
// }
|
|
//}
|
|
do
|
|
{
|
|
number++;
|
|
code = codePrefix + number.ToString();
|
|
if (!existingClientCodes.Contains(code))
|
|
{ break; }
|
|
} while (true);
|
|
|
|
clientObj.Number = code;
|
|
}
|
|
}
|
|
}
|
|
}
|