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

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;
}
}
}
}